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 501 for trunk/NEMO/TOP_SRC/TRP/trcbbl_adv.h90 – NEMO

Ignore:
Timestamp:
2006-09-12T13:10:14+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_068:CE:re-organization of coordinate definition and scale factors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/TOP_SRC/TRP/trcbbl_adv.h90

    r403 r501  
    5252      !!   9.0  !  04-03  (C. Ethe) Adaptation for Passive tracers  
    5353      !!----------------------------------------------------------------------      
    54       !! * Modules used 
    55       USE lbclnk           ! ocean lateral boundary conditions (or mpp link) 
    56       USE eosbn2 
    57  
     54      !gh 
     55       
    5856      !! * Arguments 
    5957      INTEGER, INTENT( in ) ::   kt        ! ocean time-step  
     
    6664         zsign, zt, zs, zh, zalbet,     &  ! temporary scalars 
    6765         zgdrho, zbtr, ztra                !    "         "  
    68       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    69          zki, zkj, zkw, zkx, zky, zkz,  &  ! temporary workspace arrays 
    70          ztnb, zsnb, zdep, ztrb,        &  !    "                  " 
    71          zahu, zahv                        !    "                  " 
     66      REAL(wp), DIMENSION(jpi,jpj) ::   &   
     67          ztnb, zsnb, zdep, ztrb       ! temporary workspace arrays  
    7268      REAL(wp), DIMENSION(jpi,jpj) ::   &  ! temporary workspace arrays 
    7369         zalphax, zwu, zunb,            &  !    "                  " 
    7470         zalphay, zwv, zvnb,            &  !    "                  " 
    75          zwx, zwy                          !    "                  " 
     71         zwx, zwy, zww, zwz,            &  !    "                  " 
     72         zti, zsi ,ztmin,ztmax, zsmin,zsmax!    "                  " 
     73                              !    "                  " 
    7674      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   & 
    7775         zhdivn                            ! temporary workspace arrays 
    7876      REAL(wp) ::   & 
    79          zfui, zfvj, zbt, zsigna           ! temporary scalars 
     77         zfui, zfvj, zbt,  zsigna,     &  ! temporary scalars 
     78    iku1,iku2,ikv1,ikv2,      &  ! temporary scalars 
     79    ze3u,ze3v,          &  ! temporary scalars 
     80    z2,z2dtt                  ! temporary scalars 
    8081      REAL(wp) ::   & 
    8182         fsalbt, pft, pfs, pfh             ! statement function 
     
    103104      !!---------------------------------------------------------------------- 
    104105 
    105       IF( kt == nittrc000 )   CALL trc_bbl_init    ! initialization at first time-step 
    106  
     106   IF( kt == nit000 )   CALL trc_bbl_init    ! initialization at first time-step 
     107    
    107108      ! 1. 2D fields of bottom temperature and salinity, and bottom slope 
    108109      ! ----------------------------------------------------------------- 
    109110      ! mbathy= number of w-level, minimum value=1 (cf dommsk.F) 
    110111 
    111 #if defined key_vectopt_loop   &&   ! defined key_autotasking 
     112#if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    112113      jj = 1 
    113114      DO ji = 1, jpij   ! vector opt. (forced unrolling) 
     
    116117         DO ji = 1, jpi 
    117118#endif 
    118             ik = mbkt(ji,jj)                               ! index of the bottom ocean T-level 
    119             ztnb(ji,jj) = tn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now T at the ocean bottom  
    120             zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now S at the ocean bottom 
     119            ik = mbkt(ji,jj)                    ! index of the bottom ocean T-level 
     120            ztnb(ji,jj) = tn(ji,jj,ik)    ! masked now T at the ocean bottom  
     121            zsnb(ji,jj) = sn(ji,jj,ik)    ! masked now S at the ocean bottom 
    121122            zdep(ji,jj) = fsdept(ji,jj,ik)                 ! depth of the ocean bottom T-level 
    122 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
     123!gh 
     124            zunb(ji,jj) = un(ji,jj,mbku(ji,jj))  
     125            zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj))  
     126#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
    123127         END DO 
    124128#endif 
    125129      END DO 
    126 #if defined key_vectopt_loop   &&   ! defined key_autotasking  
    127       jj = 1 
    128       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    129             zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1) 
    130             zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)   ! retirer le mask en u, v et t ! 
    131       END DO 
    132 #else 
    133       DO jj = 1, jpjm1 
    134          DO ji = 1, jpim1 
    135             zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1) 
    136             zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1) 
    137          END DO 
    138       END DO 
    139 #endif 
    140  
    141       ! boundary conditions on zunb and zvnb   (changed sign) 
    142        CALL lbc_lnk( zunb, 'U', -1. )   ;   CALL lbc_lnk( zvnb, 'V', -1. ) 
    143  
    144  
    145130 
    146131      ! 2. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0 
     
    166151          zgdrho = zgdrho * umask(ji,jj,1) 
    167152      !   ... sign of local i-gradient of density multiplied by the i-slope 
    168           zsign = sign( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
    169           zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 
    170  
    171           zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
    172           zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1) 
     153          zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     154     zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     155          zalphax(ji,jj) = ( 0.5 + zsigna ) * ( 0.5-zsign ) * umask(ji,jj,1) 
    173156        END DO 
    174157      END DO 
     
    185168          zgdrho = zalbet*( ztnb(ji,jj+1) - ztnb(ji,jj) )   & 
    186169                     -    ( zsnb(ji,jj+1) - zsnb(ji,jj) ) 
    187           zgdrho = zgdrho*vmask(ji,jj,1) 
     170          zgdrho = zgdrho * vmask(ji,jj,1) 
    188171      !   ... sign of local j-gradient of density multiplied by the j-slope 
    189           zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    190           zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 
    191  
    192           zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    193           zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1) 
     172          zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     173     zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     174          zalphay(ji,jj) = ( 0.5 + zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
    194175        END DO 
    195176      END DO 
     
    198179      CASE ( 1 )               ! Linear formulation function of temperature only 
    199180 
    200  
    201 #  if defined key_vectopt_loop   &&   ! defined key_autotasking 
    202       jj = 1 
    203       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    204 #  else 
    205181      DO jj = 1, jpjm1 
    206          DO ji = 1, jpim1 
    207 #  endif 
     182        DO ji = 1, fs_jpim1   ! vector opt. 
    208183            ! temperature, salinity anomalie and depth 
    209184            zt = 0.5 * ( ztnb(ji,jj) + ztnb(ji+1,jj) ) 
    210185            zs = 0.5 * ( zsnb(ji,jj) + zsnb(ji+1,jj) ) - 35.0 
    211186            zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) ) 
    212             ! masked ratio alpha/beta 
     187!gh            ! masked ratio alpha/beta 
    213188            ! local density gradient along i-bathymetric slope 
    214             zgdrho =  ( ztnb(ji+1,jj) - ztnb(ji,jj) ) 
     189            zgdrho =  ( ztnb(ji+1,jj) - ztnb(ji,jj) )    
    215190            ! sign of local i-gradient of density multiplied by the i-slope 
    216             zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
    217             zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 
    218  
    219             zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
    220             zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1) 
    221 #  if ! defined key_vectopt_loop   ||   defined key_autotasking 
     191            zsign = SIGN( 0.5, - zgdrho    * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     192       zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     193            zalphax(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * umask(ji,jj,1) 
    222194         END DO 
    223 #  endif 
    224       END DO 
    225  
    226 #  if defined key_vectopt_loop   &&   ! defined key_autotasking 
    227       jj = 1 
    228       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    229 #  else 
     195      END DO 
     196 
    230197      DO jj = 1, jpjm1 
    231          DO ji = 1, jpim1 
    232 #  endif 
     198        DO ji = 1, fs_jpim1   ! vector opt. 
    233199            ! temperature, salinity anomalie and depth 
    234200            zt = 0.5 * ( ztnb(ji,jj+1) + ztnb(ji,jj) ) 
    235201            zs = 0.5 * ( zsnb(ji,jj+1) + zsnb(ji,jj) ) - 35.0 
    236202            zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) ) 
    237             ! masked ratio alpha/beta 
     203!gh             ! masked ratio alpha/beta 
    238204            ! local density gradient along j-bathymetric slope 
    239             zgdrho =  ( ztnb(ji,jj+1) - ztnb(ji,jj) ) 
     205            zgdrho =  ( ztnb(ji,jj+1) - ztnb(ji,jj) )    
    240206            ! sign of local j-gradient of density multiplied by the j-slope 
    241             zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    242             zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 
    243  
    244             zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    245             zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1) 
    246 #  if ! defined key_vectopt_loop   ||   defined key_autotasking 
     207            zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     208       zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     209            zalphay(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
    247210         END DO 
    248 #  endif 
    249       END DO 
    250  
     211      END DO 
     212        
    251213      CASE ( 2 )               ! Linear formulation function of temperature and salinity 
    252  
    253       DO jj = 1, jpjm1 
    254          DO ji = 1, fs_jpim1   ! vector opt. 
    255             ! local density gradient along i-bathymetric slope 
     214 DO jj = 1, jpjm1 
     215        DO ji = 1, fs_jpim1   ! vector opt. 
     216       ! local density gradient along i-bathymetric slope 
    256217            zgdrho = - ( rbeta*( zsnb(ji+1,jj) - zsnb(ji,jj) )   & 
    257218                     -  ralpha*( ztnb(ji+1,jj) - ztnb(ji,jj) ) ) 
    258219            ! sign of local i-gradient of density multiplied by the i-slope 
    259220            zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
    260  
    261             zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
     221       zsigna= SIGN( 0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
    262222            zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1) 
     223        END DO 
     224      END DO 
     225 
     226      DO jj = 1, jpjm1 
     227        DO ji = 1, fs_jpim1   ! vector opt. 
     228      ! local density gradient along j-bathymetric slope 
     229            zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) )   & 
     230                   -    ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) )    
     231            ! sign of local j-gradient of density multiplied by the j-slope 
     232            zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji,jj+1) - zdep(ji,jj) ) )   
     233       zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     234            zalphay(ji,jj) = ( 0.5 - zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
    263235         END DO 
    264236      END DO 
    265237 
    266       DO jj = 1, jpjm1 
    267          DO ji = 1, fs_jpim1   ! vector opt. 
    268              ! local density gradient along j-bathymetric slope 
    269              zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) )   & 
    270                     -    ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) ) 
    271              ! sign of local j-gradient of density multiplied by the j-slope 
    272              zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    273  
    274              zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    275              zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1) 
    276          END DO 
    277       END DO 
    278  
    279  
     238        
    280239      CASE DEFAULT 
    281240 
     
    295254       u_trc_bbl(:,:,:) = 0.e0 
    296255       v_trc_bbl(:,:,:) = 0.e0 
    297 # if defined key_vectopt_loop   &&   ! defined key_autotasking 
     256        
     257        
     258!gh      
     259       IF( ln_zps ) THEN 
     260      ! partial steps correction    
     261       
     262#if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    298263       jj = 1 
    299264       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    300 # else 
     265#else 
    301266       DO jj = 1, jpjm1 
    302267          DO ji = 1, jpim1 
    303 # endif 
    304              iku = mbku(ji,jj) 
    305              ikv = mbkv(ji,jj) 
     268#endif 
     269             iku  = mbku(ji  ,jj  ) 
     270             ikv  = mbkv(ji  ,jj  )   
     271             iku1 = mbkt(ji+1,jj  ) 
     272             iku2 = mbkt(ji  ,jj  ) 
     273             ikv1 = mbkt(ji  ,jj+1) 
     274             ikv2 = mbkt(ji  ,jj  ) 
     275             ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) )  
     276             ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) )  
     277              
    306278             IF( MAX(iku,ikv) >  1 ) THEN 
    307                 u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * umask(ji,jj,1) 
    308                 v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * vmask(ji,jj,1) 
     279                u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * ze3u / fse3u(ji,jj,iku) 
     280                v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * ze3v / fse3v(ji,jj,ikv)        
    309281             ENDIF 
    310 # if ! defined key_vectopt_loop   ||   defined key_autotasking 
    311           END DO 
    312 # endif 
     282#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     283          END DO 
     284#endif 
    313285       END DO 
    314286 
    315        ! lateral boundary conditions on u_trc_bbl and v_trc_bbl   (changed sign) 
     287      ! lateral boundary conditions on u_trc_bbl and v_trc_bbl   (changed sign) 
    316288       CALL lbc_lnk( u_trc_bbl, 'U', -1. )   ;   CALL lbc_lnk( v_trc_bbl, 'V', -1. ) 
    317  
    318  
     289        
     290    ELSE    ! z-coordinate - full steps or s-coordinate    
     291       ! if not partial step loop over the whole domain no lbc call 
     292 
     293#if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     294      jj = 1 
     295      DO ji = 1, jpij   ! vector opt. (forced unrolling) 
     296#else 
     297      DO jj = 1, jpj 
     298         DO ji = 1, jpi 
     299#endif 
     300            iku = mbku(ji,jj) 
     301            ikv = mbkv(ji,jj) 
     302            IF( MAX(iku,ikv) >  1 ) THEN 
     303               u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku)  
     304               v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv)        
     305            ENDIF 
     306#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     307         END DO 
     308#endif 
     309          END DO 
     310        
     311       ENDIF 
    319312        
    320313       DO jn = 1, jptra 
    321314 
    322 #if defined key_vectopt_loop   &&   ! defined key_autotasking 
     315#if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    323316          jj = 1 
    324317          DO ji = 1, jpij   ! vector opt. (forced unrolling) 
     
    329322                ik = mbkt(ji,jj)                               ! index of the bottom ocean T-level 
    330323                ztrb(ji,jj) = trb(ji,jj,ik,jn) * tmask(ji,jj,1)    ! masked now T at the ocean bottom  
    331 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
    332              END DO 
    333 #endif 
    334           END DO 
     324#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     325             END DO 
     326#endif 
     327          END DO 
     328 
    335329 
    336330 
     
    339333          ! ... Second order centered tracer flux at u and v-points 
    340334        
    341 # if defined key_vectopt_loop   &&   ! defined key_autotasking 
     335# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    342336          jj = 1 
    343337          DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     
    348342                iku = mbku(ji,jj) 
    349343                ikv = mbkv(ji,jj) 
    350                 zfui = zalphax(ji,jj) *e2u(ji,jj) * fse3u(ji,jj,iku) * zunb(ji,jj) 
    351                 zfvj = zalphay(ji,jj) *e1v(ji,jj) * fse3v(ji,jj,ikv) * zvnb(ji,jj) 
     344                zfui = e2u(ji,jj) * fse3u(ji,jj,iku) * u_trc_bbl(ji,jj,iku) 
     345                zfvj = e1v(ji,jj) * fse3v(ji,jj,ikv) * v_trc_bbl(ji,jj,ikv) 
    352346                ! upstream scheme 
    353347                zwx(ji,jj) = ( ( zfui + ABS( zfui ) ) * ztrb(ji  ,jj  )   & 
     
    355349                zwy(ji,jj) = ( ( zfvj + ABS( zfvj ) ) * ztrb(ji  ,jj  )   & 
    356350                   &          +( zfvj - ABS( zfvj ) ) * ztrb(ji  ,jj+1) ) * 0.5 
    357 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
    358              END DO 
    359 #endif 
    360           END DO 
    361 # if defined key_vectopt_loop   &&   ! defined key_autotasking 
     351#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     352             END DO 
     353#endif 
     354          END DO 
     355      
     356# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    362357          jj = 1 
    363358          DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
     
    371366                ztra = - zbtr * (  zwx(ji,jj) - zwx(ji-1,jj  )   & 
    372367                   &             + zwy(ji,jj) - zwy(ji  ,jj-1)  ) 
    373  
     368  
    374369                ! add it to the general tracer trends 
    375370                tra(ji,jj,ik,jn) = tra(ji,jj,ik,jn) + ztra 
    376 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
    377              END DO 
    378 #endif 
    379           END DO 
    380  
    381        END DO 
    382  
    383       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     371#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     372             END DO 
     373#endif 
     374          END DO 
     375      
     376        END DO 
     377    
     378        IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    384379         WRITE(charout, FMT="('bbl - adv')") 
    385380         CALL prt_ctl_trc_info(charout) 
    386381         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd') 
    387382      ENDIF          
     383        
    388384       ! 6. Vertical advection velocities 
    389385       ! -------------------------------- 
     
    393389          DO jj=1, jpjm1 
    394390             DO ji = 1, fs_jpim1   ! vertor opt. 
    395                 zwu(ji,jj) = -e2u(ji,jj) * u_trc_bbl(ji,jj,jk) 
    396                 zwv(ji,jj) = -e1v(ji,jj) * v_trc_bbl(ji,jj,jk) 
     391                zwu(ji,jj) = -e2u(ji,jj) * u_trc_bbl(ji,jj,jk) * fse3u(ji,jj,jk) 
     392                zwv(ji,jj) = -e1v(ji,jj) * v_trc_bbl(ji,jj,jk) * fse3v(ji,jj,jk) 
    397393             END DO 
    398394          END DO 
     
    401397          DO jj = 2, jpjm1 
    402398             DO ji = fs_2, fs_jpim1   ! vector opt. 
    403                 zbt = e1t(ji,jj) * e2t(ji,jj) 
     399                zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) 
    404400                zhdivn(ji,jj,jk) = (  zwu(ji,jj) - zwu(ji-1,jj  )   & 
    405401                   &                + zwv(ji,jj) - zwv(ji  ,jj-1)  ) / zbt 
     
    410406 
    411407       ! ... horizontal bottom divergence 
    412 # if defined key_vectopt_loop   &&   ! defined key_autotasking 
    413        jj = 1 
    414        DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     408!gh 
     409       IF( ln_zps ) THEN  
     410      
     411# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     412          jj = 1 
     413          DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    415414# else 
    416        DO jj = 1, jpjm1 
    417           DO ji = 1, jpim1 
    418 # endif 
    419              iku = mbku(ji,jj) 
    420              ikv = mbkv(ji,jj) 
    421              zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku)  
    422              zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv)  
    423 #if ! defined key_vectopt_loop   ||   defined key_autotasking 
    424           END DO 
    425 #endif 
    426        END DO 
    427  
    428 # if defined key_vectopt_loop   &&   ! defined key_autotasking 
     415          DO jj = 1, jpjm1 
     416             DO ji = 1, jpim1 
     417# endif 
     418                iku  = mbku(ji  ,jj  ) 
     419                ikv  = mbkv(ji  ,jj  )   
     420                iku1 = mbkt(ji+1,jj  ) 
     421                iku2 = mbkt(ji  ,jj  ) 
     422                ikv1 = mbkt(ji  ,jj+1) 
     423                ikv2 = mbkt(ji  ,jj  ) 
     424                ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) )  
     425                ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) )  
     426                 
     427                zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * ze3u   
     428                zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * ze3v 
     429#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     430             END DO 
     431#endif 
     432          END DO 
     433    
     434       ELSE 
     435 
     436# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     437          jj = 1 
     438          DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     439# else 
     440          DO jj = 1, jpjm1 
     441             DO ji = 1, jpim1 
     442# endif 
     443                iku = mbku(ji,jj) 
     444                ikv = mbkv(ji,jj) 
     445                zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku)  
     446                zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv)  
     447#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     448             END DO 
     449#endif 
     450          END DO 
     451       ENDIF 
     452 
     453# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    429454       jj = 1 
    430455       DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
     
    436461             zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik) 
    437462             zhdivn(ji,jj,ik) =   & 
    438                 &   (  zwu(ji  ,jj  ) * ( zunb(ji  ,jj  ) - un(ji  ,jj  ,ik) *umask(ji  ,jj  ,1) )   & 
    439                 &    - zwu(ji-1,jj  ) * ( zunb(ji-1,jj  ) - un(ji-1,jj  ,ik) *umask(ji-1,jj  ,1) )   & 
    440                 &    + zwv(ji  ,jj  ) * ( zvnb(ji  ,jj  ) - vn(ji  ,jj  ,ik) *vmask(ji  ,jj  ,1) )   & 
    441                 &    - zwv(ji  ,jj-1) * ( zvnb(ji  ,jj-1) - vn(ji  ,jj-1,ik) *vmask(ji  ,jj-1,1) )   & 
     463                &   (  zwu(ji  ,jj  ) * ( zunb(ji  ,jj  ) - un(ji  ,jj  ,ik) )   & 
     464                &    - zwu(ji-1,jj  ) * ( zunb(ji-1,jj  ) - un(ji-1,jj  ,ik) )   & 
     465                &    + zwv(ji  ,jj  ) * ( zvnb(ji  ,jj  ) - vn(ji  ,jj  ,ik) )   & 
     466                &    - zwv(ji  ,jj-1) * ( zvnb(ji  ,jj-1) - vn(ji  ,jj-1,ik) )   & 
    442467                &   ) / zbt 
    443468 
    444 # if ! defined key_vectopt_loop   ||   defined key_autotasking 
     469# if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
    445470          END DO 
    446471# endif 
Note: See TracChangeset for help on using the changeset viewer.