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 14072 for NEMO/trunk/src/ICE/icedyn_adv_umx.F90 – NEMO

Ignore:
Timestamp:
2020-12-04T08:48:38+01:00 (4 years ago)
Author:
laurent
Message:

Merging branch "2020/dev_r13648_ASINTER-04_laurent_bulk_ice", ticket #2369

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/ICE/icedyn_adv_umx.F90

    r14005 r14072  
    1414   !!   ultimate_x(_y)    : compute a tracer value at velocity points using ULTIMATE scheme at various orders 
    1515   !!   macho             : compute the fluxes 
    16    !!   nonosc_ice        : limit the fluxes using a non-oscillatory algorithm  
     16   !!   nonosc_ice        : limit the fluxes using a non-oscillatory algorithm 
    1717   !!---------------------------------------------------------------------- 
    1818   USE phycst         ! physical constant 
     
    6363      !!---------------------------------------------------------------------- 
    6464      !!                  ***  ROUTINE ice_dyn_adv_umx  *** 
    65       !!  
    66       !! **  Purpose :   Compute the now trend due to total advection of  
     65      !! 
     66      !! **  Purpose :   Compute the now trend due to total advection of 
    6767      !!                 tracers and add it to the general trend of tracer equations 
    6868      !!                 using an "Ultimate-Macho" scheme 
    6969      !! 
    70       !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.  
     70      !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 
    7171      !!---------------------------------------------------------------------- 
    7272      INTEGER                     , INTENT(in   ) ::   kn_umx     ! order of the scheme (1-5=UM or 20=CEN2) 
     
    103103      REAL(wp), DIMENSION(jpi,jpj,nlay_s,jpl) ::   ze_s, zes_max 
    104104      ! 
    105       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zuv_ho, zvv_ho, zuv_ups, zvv_ups, z1_vi, z1_vs  
     105      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zuv_ho, zvv_ho, zuv_ups, zvv_ups, z1_vi, z1_vs 
    106106      !! diagnostics 
    107       REAL(wp), DIMENSION(jpi,jpj)            ::   zdiag_adv_mass, zdiag_adv_salt, zdiag_adv_heat       
     107      REAL(wp), DIMENSION(jpi,jpj)            ::   zdiag_adv_mass, zdiag_adv_salt, zdiag_adv_heat 
    108108      !!---------------------------------------------------------------------- 
    109109      ! 
     
    131131         ELSEWHERE                      ; ze_s(:,:,jk,:) = 0._wp 
    132132         END WHERE 
    133       END DO    
     133      END DO 
    134134      CALL icemax4D( ze_i , zei_max ) 
    135135      CALL icemax4D( ze_s , zes_max ) 
     
    143143      zcflnow(1) =                  MAXVAL( ABS( pu_ice(:,:) ) * rDt_ice * r1_e1u(:,:) ) 
    144144      zcflnow(1) = MAX( zcflnow(1), MAXVAL( ABS( pv_ice(:,:) ) * rDt_ice * r1_e2v(:,:) ) ) 
    145        
     145 
    146146      ! non-blocking global communication send zcflnow and receive zcflprv 
    147147      CALL mpp_delay_max( 'icedyn_adv_umx', 'cflice', zcflnow(:), zcflprv(:), kt == nitend - nn_fsbc + 1 ) 
     
    157157      zvdx(:,:) = pv_ice(:,:) * e1v(:,:) 
    158158      ! 
    159       ! setup transport for each ice cat  
     159      ! setup transport for each ice cat 
    160160      DO jl = 1, jpl 
    161161         zu_cat(:,:,jl) = zudy(:,:) 
     
    190190         ! record at_i before advection (for open water) 
    191191         zati1(:,:) = SUM( pa_i(:,:,:), dim=3 ) 
    192           
     192 
    193193         ! inverse of A and Ap 
    194194         WHERE( pa_i(:,:,:) >= epsi20 )   ;   z1_ai(:,:,:) = 1._wp / pa_i(:,:,:) 
     
    201201         ! setup a mask where advection will be upstream 
    202202         IF( ll_neg ) THEN 
    203             IF( .NOT. ALLOCATED(imsk_small) )   ALLOCATE( imsk_small(jpi,jpj,jpl) )  
    204             IF( .NOT. ALLOCATED(jmsk_small) )   ALLOCATE( jmsk_small(jpi,jpj,jpl) )  
     203            IF( .NOT. ALLOCATED(imsk_small) )   ALLOCATE( imsk_small(jpi,jpj,jpl) ) 
     204            IF( .NOT. ALLOCATED(jmsk_small) )   ALLOCATE( jmsk_small(jpi,jpj,jpl) ) 
    205205            DO jl = 1, jpl 
    206206               DO_2D( 1, 0, 1, 0 ) 
     
    232232            CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 
    233233               &                                      zhvar, pv_i, zua_ups, zva_ups ) 
    234             !== Snw volume ==!          
     234            !== Snw volume ==! 
    235235            zhvar(:,:,:) = pv_s(:,:,:) * z1_ai(:,:,:) 
    236236            CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 
     
    260260            CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 
    261261               &                                      zhvar, pv_i, zua_ups, zva_ups ) 
    262             !== Snw volume ==!          
     262            !== Snw volume ==! 
    263263            zhvar(:,:,:) = pv_s(:,:,:) * z1_ai(:,:,:) 
    264264            CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy , zvdx, zua_ho , zva_ho , zcu_box, zcv_box, & 
     
    316316                  &                                      zhvar, pe_i(:,:,jk,:), zuv_ups, zvv_ups ) 
    317317            END DO 
    318             !== Snow volume ==!          
     318            !== Snow volume ==! 
    319319            zuv_ups = zua_ups 
    320320            zvv_ups = zva_ups 
     
    374374         zati2(:,:) = SUM( pa_i(:,:,:), dim=3 ) 
    375375         DO_2D( 0, 0, 0, 0 ) 
    376             pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) &  
     376            pato_i(ji,jj) = pato_i(ji,jj) - ( zati2(ji,jj) - zati1(ji,jj) ) & 
    377377               &                          - ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) ) * r1_e1e2t(ji,jj) * zdt 
    378378         END_2D 
     
    406406   END SUBROUTINE ice_dyn_adv_umx 
    407407 
    408     
     408 
    409409   SUBROUTINE adv_umx( pamsk, kn_umx, jt, kt, pdt, pu, pv, puc, pvc, pubox, pvbox,  & 
    410410      &                                            pt, ptc, pua_ups, pva_ups, pua_ho, pva_ho ) 
    411411      !!---------------------------------------------------------------------- 
    412412      !!                  ***  ROUTINE adv_umx  *** 
    413       !!  
    414       !! **  Purpose :   Compute the now trend due to total advection of  
     413      !! 
     414      !! **  Purpose :   Compute the now trend due to total advection of 
    415415      !!                 tracers and add it to the general trend of tracer equations 
    416416      !! 
     
    434434      !! 
    435435      !!             in eq. c), one can solve the equation for  S (ln_advS=T), then dVS/dt = -div(uV * uS  / u) 
    436       !!                                                or for HS (ln_advS=F), then dVS/dt = -div(uA * uHS / u)  
     436      !!                                                or for HS (ln_advS=F), then dVS/dt = -div(uA * uHS / u) 
    437437      !! 
    438438      !! ** Note : - this method can lead to tiny negative V (-1.e-20) => set it to 0 while conserving mass etc. 
     
    462462      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out), OPTIONAL ::   pua_ho, pva_ho   ! high order u*a fluxes 
    463463      ! 
    464       INTEGER  ::   ji, jj, jl       ! dummy loop indices   
     464      INTEGER  ::   ji, jj, jl       ! dummy loop indices 
    465465      REAL(wp) ::   ztra             ! local scalar 
    466466      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zfu_ho , zfv_ho , zpt 
     
    468468      !!---------------------------------------------------------------------- 
    469469      ! 
    470       ! Upstream (_ups) fluxes  
     470      ! Upstream (_ups) fluxes 
    471471      ! ----------------------- 
    472472      CALL upstream( pamsk, jt, kt, pdt, pt, pu, pv, zt_ups, zfu_ups, zfv_ups ) 
    473        
    474       ! High order (_ho) fluxes  
     473 
     474      ! High order (_ho) fluxes 
    475475      ! ----------------------- 
    476476      SELECT CASE( kn_umx ) 
     
    506506                  zfv_ups(ji,jj,jl) = zfv_ups(ji,jj,jl) * pva_ups(ji,jj,jl) / pv(ji,jj) 
    507507               ELSE 
    508                   zfv_ho (ji,jj,jl) = 0._wp   
    509                   zfv_ups(ji,jj,jl) = 0._wp   
     508                  zfv_ho (ji,jj,jl) = 0._wp 
     509                  zfv_ups(ji,jj,jl) = 0._wp 
    510510               ENDIF 
    511511            END_2D 
     
    551551      DO jl = 1, jpl 
    552552         DO_2D( 0, 0, 0, 0 ) 
    553             ztra = - ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) + zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) )   
    554             ! 
    555             ptc(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1)                
     553            ztra = - ( zfu_ho(ji,jj,jl) - zfu_ho(ji-1,jj,jl) + zfv_ho(ji,jj,jl) - zfv_ho(ji,jj-1,jl) ) 
     554            ! 
     555            ptc(ji,jj,jl) = ( ptc(ji,jj,jl) + ztra * r1_e1e2t(ji,jj) * pdt ) * tmask(ji,jj,1) 
    556556         END_2D 
    557557      END DO 
     
    563563      !!--------------------------------------------------------------------- 
    564564      !!                    ***  ROUTINE upstream  *** 
    565       !!      
     565      !! 
    566566      !! **  Purpose :   compute the upstream fluxes and upstream guess of tracer 
    567567      !!---------------------------------------------------------------------- 
     
    572572      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt               ! tracer fields 
    573573      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pu, pv           ! 2 ice velocity components 
    574       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_ups           ! upstream guess of tracer  
    575       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ups, pfv_ups ! upstream fluxes  
     574      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_ups           ! upstream guess of tracer 
     575      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ups, pfv_ups ! upstream fluxes 
    576576      ! 
    577577      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
     
    638638            ! 
    639639         ENDIF 
    640           
     640 
    641641      ENDIF 
    642642      ! 
     
    655655   END SUBROUTINE upstream 
    656656 
    657     
     657 
    658658   SUBROUTINE cen2( pamsk, jt, kt, pdt, pt, pu, pv, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 
    659659      !!--------------------------------------------------------------------- 
    660660      !!                    ***  ROUTINE cen2  *** 
    661       !!      
     661      !! 
    662662      !! **  Purpose :   compute the high order fluxes using a centered 
    663       !!                 second order scheme  
     663      !!                 second order scheme 
    664664      !!---------------------------------------------------------------------- 
    665665      REAL(wp)                        , INTENT(in   ) ::   pamsk            ! advection of concentration (1) or other tracers (0) 
     
    669669      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt               ! tracer fields 
    670670      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pu, pv           ! 2 ice velocity components 
    671       REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt_ups           ! upstream guess of tracer  
    672       REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pfu_ups, pfv_ups ! upstream fluxes  
    673       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho, pfv_ho   ! high order fluxes  
     671      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt_ups           ! upstream guess of tracer 
     672      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pfu_ups, pfv_ups ! upstream fluxes 
     673      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho, pfv_ho   ! high order fluxes 
    674674      ! 
    675675      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
     
    750750         ENDIF 
    751751         IF( np_limiter == 1 )   CALL nonosc_ice( pamsk, pdt, pu, pv, pt, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 
    752           
     752 
    753753      ENDIF 
    754     
     754 
    755755   END SUBROUTINE cen2 
    756756 
    757     
     757 
    758758   SUBROUTINE macho( pamsk, kn_umx, jt, kt, pdt, pt, pu, pv, pubox, pvbox, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 
    759759      !!--------------------------------------------------------------------- 
    760760      !!                    ***  ROUTINE macho  *** 
    761       !!      
    762       !! **  Purpose :   compute the high order fluxes using Ultimate-Macho scheme   
     761      !! 
     762      !! **  Purpose :   compute the high order fluxes using Ultimate-Macho scheme 
    763763      !! 
    764764      !! **  Method  :   ... 
    765765      !! 
    766       !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.  
     766      !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 
    767767      !!---------------------------------------------------------------------- 
    768768      REAL(wp)                        , INTENT(in   ) ::   pamsk            ! advection of concentration (1) or other tracers (0) 
     
    774774      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pu, pv           ! 2 ice velocity components 
    775775      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pubox, pvbox     ! upstream velocity 
    776       REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt_ups           ! upstream guess of tracer  
    777       REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pfu_ups, pfv_ups ! upstream fluxes  
    778       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho, pfv_ho   ! high order fluxes  
     776      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt_ups           ! upstream guess of tracer 
     777      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pfu_ups, pfv_ups ! upstream fluxes 
     778      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho, pfv_ho   ! high order fluxes 
    779779      ! 
    780780      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
     
    807807         !                                                        !--  limiter in y --! 
    808808         IF( np_limiter == 2 .OR. np_limiter == 3 )   CALL limiter_y( pdt, pv, pt, pfv_ups, pfv_ho ) 
    809          !          
     809         ! 
    810810         ! 
    811811      ELSE                                                               !==  even ice time step:  adv_y then adv_x  ==! 
     
    821821                  &                              + pt   (ji,jj,jl) * ( pv  (ji,jj   ) - pv  (ji,jj-1   ) ) * r1_e1e2t(ji,jj) & 
    822822                  &                                                                                        * pamsk           & 
    823                   &                             ) * pdt ) * tmask(ji,jj,1)  
     823                  &                             ) * pdt ) * tmask(ji,jj,1) 
    824824            END_2D 
    825825         END DO 
     
    845845      !!--------------------------------------------------------------------- 
    846846      !!                    ***  ROUTINE ultimate_x  *** 
    847       !!      
    848       !! **  Purpose :   compute tracer at u-points  
     847      !! 
     848      !! **  Purpose :   compute tracer at u-points 
    849849      !! 
    850850      !! **  Method  :   ... 
    851851      !! 
    852       !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.  
     852      !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 
    853853      !!---------------------------------------------------------------------- 
    854854      REAL(wp)                        , INTENT(in   ) ::   pamsk     ! advection of concentration (1) or other tracers (0) 
     
    857857      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pu        ! ice i-velocity component 
    858858      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt        ! tracer fields 
    859       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_u      ! tracer at u-point  
    860       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho    ! high order flux  
     859      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_u      ! tracer at u-point 
     860      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfu_ho    ! high order flux 
    861861      ! 
    862862      INTEGER  ::   ji, jj, jl             ! dummy loop indices 
     
    897897      ! 
    898898      CASE( 1 )                                                   !==  1st order central TIM  ==! (Eq. 21) 
    899          !         
     899         ! 
    900900         DO jl = 1, jpl 
    901901            DO_2D( 0, 0, 1, 0 ) 
     
    911911               zcu  = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj) 
    912912               pt_u(ji,jj,jl) = 0.5_wp * umask(ji,jj,1) * (                                pt(ji+1,jj,jl) + pt(ji,jj,jl)   & 
    913                   &                                                            - zcu   * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) )  
    914             END_2D 
    915          END DO 
    916          !   
     913                  &                                                            - zcu   * ( pt(ji+1,jj,jl) - pt(ji,jj,jl) ) ) 
     914            END_2D 
     915         END DO 
     916         ! 
    917917      CASE( 3 )                                                   !==  3rd order central TIM  ==! (Eq. 24) 
    918918         ! 
     
    983983      ! 
    984984   END SUBROUTINE ultimate_x 
    985     
    986   
     985 
     986 
    987987   SUBROUTINE ultimate_y( pamsk, kn_umx, pdt, pt, pv, pt_v, pfv_ho ) 
    988988      !!--------------------------------------------------------------------- 
    989989      !!                    ***  ROUTINE ultimate_y  *** 
    990       !!      
    991       !! **  Purpose :   compute tracer at v-points  
     990      !! 
     991      !! **  Purpose :   compute tracer at v-points 
    992992      !! 
    993993      !! **  Method  :   ... 
    994994      !! 
    995       !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.  
     995      !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74. 
    996996      !!---------------------------------------------------------------------- 
    997997      REAL(wp)                        , INTENT(in   ) ::   pamsk     ! advection of concentration (1) or other tracers (0) 
     
    10001000      REAL(wp), DIMENSION(:,:  )      , INTENT(in   ) ::   pv        ! ice j-velocity component 
    10011001      REAL(wp), DIMENSION(:,:,:)      , INTENT(in   ) ::   pt        ! tracer fields 
    1002       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_v      ! tracer at v-point  
    1003       REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfv_ho    ! high order flux  
     1002      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pt_v      ! tracer at v-point 
     1003      REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(  out) ::   pfv_ho    ! high order flux 
    10041004      ! 
    10051005      INTEGER  ::   ji, jj, jl         ! dummy loop indices 
     
    11151115      ! 
    11161116   END SUBROUTINE ultimate_y 
    1117       
     1117 
    11181118 
    11191119   SUBROUTINE nonosc_ice( pamsk, pdt, pu, pv, pt, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho ) 
    11201120      !!--------------------------------------------------------------------- 
    11211121      !!                    ***  ROUTINE nonosc_ice  *** 
    1122       !!      
    1123       !! **  Purpose :   compute monotonic tracer fluxes from the upstream  
    1124       !!       scheme and the before field by a non-oscillatory algorithm  
     1122      !! 
     1123      !! **  Purpose :   compute monotonic tracer fluxes from the upstream 
     1124      !!       scheme and the before field by a non-oscillatory algorithm 
    11251125      !! 
    11261126      !! **  Method  :   ... 
     
    11411141      !!---------------------------------------------------------------------- 
    11421142      zbig = 1.e+40_wp 
    1143        
     1143 
    11441144      ! antidiffusive flux : high order minus low order 
    11451145      ! -------------------------------------------------- 
     
    11571157      !                                    pfu_ho 
    11581158      !                           *         ---> 
    1159       !                        |      |  *   |        |  
    1160       !                        |      |      |    *   |     
     1159      !                        |      |  *   |        | 
     1160      !                        |      |      |    *   | 
    11611161      !                        |      |      |        |    * 
    1162       !            t_ups :       i-1     i       i+1       i+2    
     1162      !            t_ups :       i-1     i       i+1       i+2 
    11631163      IF( ll_prelim ) THEN 
    1164           
     1164 
    11651165         DO jl = 1, jpl 
    11661166            DO_2D( 0, 0, 0, 0 ) 
     
    12001200      z1_dt = 1._wp / pdt 
    12011201      DO jl = 1, jpl 
    1202           
     1202 
    12031203         DO_2D( 1, 1, 1, 1 ) 
    12041204            IF    ( pt(ji,jj,jl) <= 0._wp .AND. pt_ups(ji,jj,jl) <= 0._wp ) THEN 
     
    12441244            ! if all the points are outside ice cover 
    12451245            IF( zup == -zbig )   zbetup(ji,jj,jl) = 0._wp ! zbig 
    1246             IF( zdo ==  zbig )   zbetdo(ji,jj,jl) = 0._wp ! zbig             
     1246            IF( zdo ==  zbig )   zbetdo(ji,jj,jl) = 0._wp ! zbig 
    12471247            ! 
    12481248         END_2D 
     
    12501250      CALL lbc_lnk_multi( 'icedyn_adv_umx', zbetup, 'T', 1.0_wp, zbetdo, 'T', 1.0_wp )   ! lateral boundary cond. (unchanged sign) 
    12511251 
    1252        
     1252 
    12531253      ! monotonic flux in the y direction 
    12541254      ! --------------------------------- 
     
    12801280   END SUBROUTINE nonosc_ice 
    12811281 
    1282     
     1282 
    12831283   SUBROUTINE limiter_x( pdt, pu, pt, pfu_ups, pfu_ho ) 
    12841284      !!--------------------------------------------------------------------- 
    12851285      !!                    ***  ROUTINE limiter_x  *** 
    1286       !!      
    1287       !! **  Purpose :   compute flux limiter  
     1286      !! 
     1287      !! **  Purpose :   compute flux limiter 
    12881288      !!---------------------------------------------------------------------- 
    12891289      REAL(wp)                  , INTENT(in   ) ::   pdt          ! tracer time-step 
     
    12951295      REAL(wp) ::   Cr, Rjm, Rj, Rjp, uCFL, zpsi, zh3, zlimiter, Rr 
    12961296      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
    1297       REAL(wp), DIMENSION (jpi,jpj,jpl) ::   zslpx       ! tracer slopes  
     1297      REAL(wp), DIMENSION (jpi,jpj,jpl) ::   zslpx       ! tracer slopes 
    12981298      !!---------------------------------------------------------------------- 
    12991299      ! 
     
    13041304      END DO 
    13051305      CALL lbc_lnk( 'icedyn_adv_umx', zslpx, 'U', -1.0_wp)   ! lateral boundary cond. 
    1306        
     1306 
    13071307      DO jl = 1, jpl 
    13081308         DO_2D( 0, 0, 0, 0 ) 
    13091309            uCFL = pdt * ABS( pu(ji,jj) ) * r1_e1e2t(ji,jj) 
    1310              
     1310 
    13111311            Rjm = zslpx(ji-1,jj,jl) 
    13121312            Rj  = zslpx(ji  ,jj,jl) 
     
    13191319               ENDIF 
    13201320 
    1321                zh3 = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl)      
     1321               zh3 = pfu_ho(ji,jj,jl) - pfu_ups(ji,jj,jl) 
    13221322               IF( Rj > 0. ) THEN 
    13231323                  zlimiter =  MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(pu(ji,jj)),  & 
     
    13711371   END SUBROUTINE limiter_x 
    13721372 
    1373     
     1373 
    13741374   SUBROUTINE limiter_y( pdt, pv, pt, pfv_ups, pfv_ho ) 
    13751375      !!--------------------------------------------------------------------- 
    13761376      !!                    ***  ROUTINE limiter_y  *** 
    1377       !!      
    1378       !! **  Purpose :   compute flux limiter  
     1377      !! 
     1378      !! **  Purpose :   compute flux limiter 
    13791379      !!---------------------------------------------------------------------- 
    13801380      REAL(wp)                   , INTENT(in   ) ::   pdt          ! tracer time-step 
     
    13861386      REAL(wp) ::   Cr, Rjm, Rj, Rjp, vCFL, zpsi, zh3, zlimiter, Rr 
    13871387      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
    1388       REAL(wp), DIMENSION (jpi,jpj,jpl) ::   zslpy       ! tracer slopes  
     1388      REAL(wp), DIMENSION (jpi,jpj,jpl) ::   zslpy       ! tracer slopes 
    13891389      !!---------------------------------------------------------------------- 
    13901390      ! 
     
    14101410               ENDIF 
    14111411 
    1412                zh3 = pfv_ho(ji,jj,jl) - pfv_ups(ji,jj,jl)      
     1412               zh3 = pfv_ho(ji,jj,jl) - pfv_ups(ji,jj,jl) 
    14131413               IF( Rj > 0. ) THEN 
    14141414                  zlimiter =  MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(pv(ji,jj)),  & 
     
    15241524                  pe_s(ji,jj,1:nlay_s,jl) = pe_s(ji,jj,1:nlay_s,jl) * zfra 
    15251525                  pv_s(ji,jj,jl)          = pa_i(ji,jj,jl) * phs_max(ji,jj,jl) 
    1526                ENDIF            
    1527                !                   
     1526               ENDIF 
     1527               ! 
    15281528               !                               ! -- check s_i -- ! 
    15291529               ! if s_i is larger than the surrounding 9 pts => put salt excess in the ocean 
     
    15371537            ENDIF 
    15381538         END_2D 
    1539       END DO  
     1539      END DO 
    15401540      ! 
    15411541      !                                           ! -- check e_i/v_i -- ! 
     
    16241624   SUBROUTINE icemax3D( pice , pmax ) 
    16251625      !!--------------------------------------------------------------------- 
    1626       !!                   ***  ROUTINE icemax3D ***                      
     1626      !!                   ***  ROUTINE icemax3D *** 
    16271627      !! ** Purpose :  compute the max of the 9 points around 
    16281628      !!---------------------------------------------------------------------- 
     
    16331633      !!---------------------------------------------------------------------- 
    16341634      DO jl = 1, jpl 
    1635          DO jj = Njs0-1, Nje0+1     
     1635         DO jj = Njs0-1, Nje0+1 
    16361636            DO ji = Nis0, Nie0 
    16371637               zmax(ji,jj) = MAX( epsi20, pice(ji,jj,jl), pice(ji-1,jj,jl), pice(ji+1,jj,jl) ) 
    16381638            END DO 
    16391639         END DO 
    1640          DO jj = Njs0, Nje0     
     1640         DO jj = Njs0, Nje0 
    16411641            DO ji = Nis0, Nie0 
    16421642               pmax(ji,jj,jl) = MAX( epsi20, zmax(ji,jj), zmax(ji,jj-1), zmax(ji,jj+1) ) 
     
    16481648   SUBROUTINE icemax4D( pice , pmax ) 
    16491649      !!--------------------------------------------------------------------- 
    1650       !!                   ***  ROUTINE icemax4D ***                      
     1650      !!                   ***  ROUTINE icemax4D *** 
    16511651      !! ** Purpose :  compute the max of the 9 points around 
    16521652      !!---------------------------------------------------------------------- 
     
    16591659      DO jl = 1, jpl 
    16601660         DO jk = 1, jlay 
    1661             DO jj = Njs0-1, Nje0+1     
     1661            DO jj = Njs0-1, Nje0+1 
    16621662               DO ji = Nis0, Nie0 
    16631663                  zmax(ji,jj) = MAX( epsi20, pice(ji,jj,jk,jl), pice(ji-1,jj,jk,jl), pice(ji+1,jj,jk,jl) ) 
    16641664               END DO 
    16651665            END DO 
    1666             DO jj = Njs0, Nje0     
     1666            DO jj = Njs0, Nje0 
    16671667               DO ji = Nis0, Nie0 
    16681668                  pmax(ji,jj,jk,jl) = MAX( epsi20, zmax(ji,jj), zmax(ji,jj-1), zmax(ji,jj+1) ) 
Note: See TracChangeset for help on using the changeset viewer.