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 5260 for branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90 – NEMO

Ignore:
Timestamp:
2015-05-12T12:37:15+02:00 (9 years ago)
Author:
deazer
Message:

Merged branch with Trunk at revision 5253.
Checked with SETTE, passes modified iodef.xml for AMM12 experiment

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO10_Tidally_Meaned_Diagnostics/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90

    r4161 r5260  
    3030   PUBLIC   lim_adv_x   ! called by lim_trp 
    3131   PUBLIC   lim_adv_y   ! called by lim_trp 
    32  
    33    REAL(wp)  ::   epsi20 = 1.e-20_wp   ! constant values 
    34    REAL(wp)  ::   rzero  = 0._wp       !    -       - 
    35    REAL(wp)  ::   rone   = 1._wp       !    -       - 
    3632 
    3733   !! * Substitutions 
     
    6763      !!  
    6864      INTEGER  ::   ji, jj                               ! dummy loop indices 
    69       REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp, zin0   ! local scalars 
     65      REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp         ! local scalars 
    7066      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !   -      - 
    7167      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !   -      - 
     
    8480      DO jj = 1, jpj 
    8581         DO ji = 1, jpi 
    86             zslpmax = MAX( rzero, ps0(ji,jj) ) 
     82            zslpmax = MAX( 0._wp, ps0(ji,jj) ) 
    8783            zs1max  = 1.5 * zslpmax 
    8884            zs1new  = MIN( zs1max, MAX( -zs1max, psx(ji,jj) ) ) 
    8985            zs2new  = MIN(  2.0 * zslpmax - 0.3334 * ABS( zs1new ),      & 
    9086               &            MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) )  ) 
    91             zin0    = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
     87            rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask 
    9288 
    9389            ps0 (ji,jj) = zslpmax   
    94             psx (ji,jj) = zs1new      * zin0 
    95             psxx(ji,jj) = zs2new      * zin0 
    96             psy (ji,jj) = psy (ji,jj) * zin0 
    97             psyy(ji,jj) = psyy(ji,jj) * zin0 
    98             psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * zin0 
     90            psx (ji,jj) = zs1new      * rswitch 
     91            psxx(ji,jj) = zs2new      * rswitch 
     92            psy (ji,jj) = psy (ji,jj) * rswitch 
     93            psyy(ji,jj) = psyy(ji,jj) * rswitch 
     94            psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch 
    9995         END DO 
    10096      END DO 
    10197 
    10298      !  Initialize volumes of boxes  (=area if adv_x first called, =psm otherwise)                                      
    103       psm (:,:)  = MAX( pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 
     99      psm (:,:)  = MAX( pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 ) 
    104100 
    105101      !  Calculate fluxes and moments between boxes i<-->i+1               
    106102      DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0  
    107103         DO ji = 1, jpi 
    108             zbet(ji,jj)  =  MAX( rzero, SIGN( rone, put(ji,jj) ) ) 
    109             zalf         =  MAX( rzero, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj) 
     104            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) ) 
     105            zalf         =  MAX( 0._wp, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj) 
    110106            zalfq        =  zalf * zalf 
    111107            zalf1        =  1.0 - zalf 
     
    133129      DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0. 
    134130         DO ji = 1, fs_jpim1 
    135             zalf          = MAX( rzero, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)  
     131            zalf          = MAX( 0._wp, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)  
    136132            zalg  (ji,jj) = zalf 
    137133            zalfq         = zalf * zalf 
     
    252248      !! 
    253249      INTEGER  ::   ji, jj                               ! dummy loop indices 
    254       REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp, zin0   ! temporary scalars 
     250      REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp         ! temporary scalars 
    255251      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !    -         - 
    256252      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !    -         - 
     
    269265      DO jj = 1, jpj 
    270266         DO ji = 1, jpi 
    271             zslpmax = MAX( rzero, ps0(ji,jj) ) 
     267            zslpmax = MAX( 0._wp, ps0(ji,jj) ) 
    272268            zs1max  = 1.5 * zslpmax 
    273269            zs1new  = MIN( zs1max, MAX( -zs1max, psy(ji,jj) ) ) 
    274270            zs2new  = MIN(  ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ),   & 
    275271               &             MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) )  ) 
    276             zin0    = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
     272            rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask 
    277273            ! 
    278274            ps0 (ji,jj) = zslpmax   
    279             psx (ji,jj) = psx (ji,jj) * zin0 
    280             psxx(ji,jj) = psxx(ji,jj) * zin0 
    281             psy (ji,jj) = zs1new * zin0 
    282             psyy(ji,jj) = zs2new * zin0 
    283             psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * zin0 
     275            psx (ji,jj) = psx (ji,jj) * rswitch 
     276            psxx(ji,jj) = psxx(ji,jj) * rswitch 
     277            psy (ji,jj) = zs1new * rswitch 
     278            psyy(ji,jj) = zs2new * rswitch 
     279            psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch 
    284280         END DO 
    285281      END DO 
    286282 
    287283      !  Initialize volumes of boxes (=area if adv_x first called, =psm otherwise) 
    288       psm(:,:)  = MAX(  pcrh * area(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20  ) 
     284      psm(:,:)  = MAX(  pcrh * e12t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20  ) 
    289285 
    290286      !  Calculate fluxes and moments between boxes j<-->j+1               
    291287      DO jj = 1, jpj                     !  Flux from j to j+1 WHEN v GT 0    
    292288         DO ji = 1, jpi 
    293             zbet(ji,jj)  =  MAX( rzero, SIGN( rone, pvt(ji,jj) ) ) 
    294             zalf         =  MAX( rzero, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj) 
     289            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, pvt(ji,jj) ) ) 
     290            zalf         =  MAX( 0._wp, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj) 
    295291            zalfq        =  zalf * zalf 
    296292            zalf1        =  1.0 - zalf 
     
    318314      DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0. 
    319315         DO ji = 1, jpi 
    320             zalf          = ( MAX(rzero, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1)  
     316            zalf          = ( MAX(0._wp, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1)  
    321317            zalg  (ji,jj) = zalf 
    322318            zalfq         = zalf * zalf 
Note: See TracChangeset for help on using the changeset viewer.