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 481 – NEMO

Changeset 481


Ignore:
Timestamp:
2006-06-19T15:29:54+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_bugfix_047 : CT : correction in order to take into account the partial steps for advective bbl

Location:
trunk/NEMO/OPA_SRC/TRA
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/trabbl.F90

    r474 r481  
    2020   USE trdmod_oce           ! ocean variables trends 
    2121   USE in_out_manager       ! I/O manager 
     22   USE lbclnk               ! ocean lateral boundary conditions 
    2223   USE prtctl               ! Print control 
    2324 
     
    115116      USE oce, ONLY :    ztdta => ua,     & ! use ua as 3D workspace    
    116117                         ztdsa => va        ! use va as 3D workspace    
    117       USE eosbn2 , ONLY : neos              ! type of equation of state 
     118      USE eosbn2                            ! equation of state 
    118119 
    119120      !! * Arguments  
     
    233234      SELECT CASE ( neos ) 
    234235 
    235       CASE ( 0   )               ! 0 :Jackett and McDougall (1994) formulation 
     236      CASE ( 0 )                 ! Jackett and McDougall (1994) formulation 
    236237 
    237238#  if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     
    321322      CASE ( 2 )               ! Linear formulation function of temperature and salinity 
    322323 
    323          CALL ctl_stop( '          use of linear eos rho(T,S) = rau0 * ( rbeta * S - ralpha * T )', & 
    324               &         '          bbl not implented: easy to do it ' ) 
    325  
     324#  if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     325      jj = 1 
     326      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     327#  else 
     328      DO jj = 1, jpjm1 
     329         DO ji = 1, jpim1 
     330#  endif       
     331            ! local density gradient along i-bathymetric slope 
     332            zgdrho = - ( rbeta*( zsnb(ji+1,jj) - zsnb(ji,jj) )   & 
     333                     -  ralpha*( ztnb(ji+1,jj) - ztnb(ji,jj) ) ) 
     334            ! sign of local i-gradient of density multiplied by the i-slope 
     335            zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     336            zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj) 
     337#  if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     338         END DO 
     339#  endif 
     340      END DO 
     341 
     342#  if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     343      jj = 1 
     344      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     345#  else 
     346      DO jj = 1, jpjm1 
     347         DO ji = 1, jpim1 
     348#  endif      
     349            ! local density gradient along j-bathymetric slope 
     350            zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) )   & 
     351                     -  ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) )    
     352            ! sign of local j-gradient of density multiplied by the j-slope 
     353            zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     354            zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj) 
     355#  if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     356         END DO 
     357#  endif 
     358      END DO 
     359       
    326360      CASE DEFAULT 
    327361 
     
    461495      !! * Local declarations 
    462496      INTEGER ::   ji, jj      ! dummy loop indices 
     497      REAL(wp),  DIMENSION(jpi,jpj) :: zmbk   
     498 
    463499      NAMELIST/nambbl/ atrbbl 
    464500      !!---------------------------------------------------------------------- 
     
    499535         END DO 
    500536      END DO 
    501 !!bug ??? 
    502 !!bug Caution : define the vakue of mbku & mbkv everywhere!!! but lbc mpp lnk : pb when closed (0) 
     537 
     538      zmbk(:,:) = FLOAT( mbku (:,:) )    
     539      CALL lbc_lnk(zmbk,'U',1.) 
     540      mbku(:,:) = MAX( INT( zmbk(:,:) ), 1 )  
     541 
     542      zmbk(:,:) = FLOAT( mbkv (:,:) )    
     543      CALL lbc_lnk(zmbk,'V',1.) 
     544      mbkv(:,:) = MAX( INT( zmbk(:,:) ), 1 )  
    503545 
    504546# if defined key_trabbl_adv 
  • trunk/NEMO/OPA_SRC/TRA/trabbl_adv.h90

    r474 r481  
    5555      !!----------------------------------------------------------------------      
    5656      !! * Modules used 
    57       USE eosbn2 
    58       USE flxrnf 
    59       USE ocfzpt 
    60       USE lbclnk 
     57      USE eosbn2                           ! equation of state 
    6158      USE oce, ONLY :    ztdta => ua,    & ! use ua as 3D workspace    
    6259                         ztdsa => va       ! use va as 3D workspace    
     
    7370         zgdrho, zbtr, zta, zsa            !    "         "  
    7471      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    75          ztnb, zsnb, zdep, ztbb, zsbb,  &  !    "                  " 
    76          zahu, zahv                        !    "                  " 
     72         ztnb, zsnb, zdep, ztbb, zsbb 
    7773      REAL(wp), DIMENSION(jpi,jpj) ::   &  ! temporary workspace arrays 
    7874         zalphax, zwu, zunb,            &  !    "                  " 
     
    8278         zhdivn                            ! temporary workspace arrays 
    8379      REAL(wp) ::   & 
    84          zfui, zfvj, zbt, zsigna           ! temporary scalars 
     80         zfui, zfvj, zbt, zsigna,       &  ! temporary scalars 
     81         iku1, iku2, ikv1, ikv2,        &  ! temporary scalars 
     82         ze3u,ze3v 
    8583      REAL(wp) ::   & 
    8684         fsalbt, pft, pfs, pfh             ! statement function 
     
    128126#endif 
    129127            ik = mbkt(ji,jj)                               ! index of the bottom ocean T-level 
    130             ztnb(ji,jj) = tn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now T at the ocean bottom  
    131             zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now S at the ocean bottom 
    132             ztbb(ji,jj) = tb(ji,jj,ik) * tmask(ji,jj,1)    ! masked before T at the ocean bottom  
    133             zsbb(ji,jj) = sb(ji,jj,ik) * tmask(ji,jj,1)    ! masked before S at the ocean bottom 
     128            ztnb(ji,jj) = tn(ji,jj,ik) 
     129            zsnb(ji,jj) = sn(ji,jj,ik) 
     130            ztbb(ji,jj) = tb(ji,jj,ik) 
     131            zsbb(ji,jj) = sb(ji,jj,ik)  
    134132            zdep(ji,jj) = fsdept(ji,jj,ik)                 ! depth of the ocean bottom T-level 
    135 #if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
    136          END DO 
    137 #endif 
    138       END DO 
    139 #if defined key_vectopt_loop   &&   ! defined key_mpp_omp  
    140       jj = 1 
    141       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    142             zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1) 
    143             zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)   ! retirer le mask en u, v et t ! 
    144       END DO 
    145 #else 
    146       DO jj = 1, jpjm1 
    147          DO ji = 1, jpim1 
    148             zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1) 
    149             zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1) 
    150          END DO 
    151       END DO 
    152 #endif 
    153   
    154       ! boundary conditions on zunb and zvnb   (changed sign) 
    155        CALL lbc_lnk( zunb, 'U', -1. )   ;   CALL lbc_lnk( zvnb, 'V', -1. ) 
    156       ! boundary condition on ztnb and znbb 
    157        CALL lbc_lnk( ztnb, 'T', 1. )    ;   CALL lbc_lnk( ztbb, 'T', 1. ) 
    158       ! boundary condition on zsnb and zsbb 
    159        CALL lbc_lnk( zsnb, 'T', 1. )    ;   CALL lbc_lnk( zsbb, 'T', 1. ) 
     133 
     134            zunb(ji,jj) = un(ji,jj,mbku(ji,jj))  
     135            zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj))  
     136#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     137         END DO 
     138#endif 
     139      END DO 
     140 
    160141 
    161142      ! 2. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0 
     
    175156          zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) ) 
    176157      !   ... masked ratio alpha/beta 
    177           zalbet = fsalbt( zt, zs, zh )*umask(ji,jj,1) 
     158          zalbet = fsalbt( zt, zs, zh ) * umask(ji,jj,1) 
    178159      !   ... local density gradient along i-bathymetric slope 
    179           zgdrho = zalbet*( ztnb(ji+1,jj) - ztnb(ji,jj) )   & 
    180                      -    ( zsnb(ji+1,jj) - zsnb(ji,jj) ) 
     160          zgdrho = zalbet * ( ztnb(ji+1,jj) - ztnb(ji,jj) )   & 
     161             &       -      ( zsnb(ji+1,jj) - zsnb(ji,jj) ) 
    181162          zgdrho = zgdrho * umask(ji,jj,1) 
    182163      !   ... sign of local i-gradient of density multiplied by the i-slope 
    183           zsign = sign( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
    184  
    185           zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
    186           zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1) 
     164          zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     165          zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     166          zalphax(ji,jj)=( 0.5 + zsigna ) * ( 0.5 - zsign ) * umask(ji,jj,1) 
    187167        END DO 
    188168      END DO 
     
    195175          zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) ) 
    196176      !   ... masked ratio alpha/beta 
    197           zalbet = fsalbt( zt, zs, zh )*vmask(ji,jj,1) 
     177          zalbet = fsalbt( zt, zs, zh ) * vmask(ji,jj,1) 
    198178      !   ... local density gradient along j-bathymetric slope 
    199           zgdrho = zalbet*( ztnb(ji,jj+1) - ztnb(ji,jj) )   & 
    200                      -    ( zsnb(ji,jj+1) - zsnb(ji,jj) ) 
     179          zgdrho = zalbet * ( ztnb(ji,jj+1) - ztnb(ji,jj) )   & 
     180             &       -      ( zsnb(ji,jj+1) - zsnb(ji,jj) ) 
    201181          zgdrho = zgdrho*vmask(ji,jj,1) 
    202182      !   ... sign of local j-gradient of density multiplied by the j-slope 
    203           zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    204  
    205           zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    206           zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1) 
     183          zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     184          zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     185          zalphay(ji,jj)=( 0.5 + zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
    207186        END DO 
    208187      END DO 
     
    212191                               ! 
    213192      DO jj = 1, jpjm1 
    214          DO ji = 1, jpim1 
     193         DO ji = 1, fs_jpim1   ! vector opt. 
    215194            ! local 'density/temperature' gradient along i-bathymetric slope 
    216             zgdrho =  ztnb(ji+1,jj) - ztnb(ji,jj) 
     195            zgdrho =  ( ztnb(ji+1,jj) - ztnb(ji,jj) ) 
    217196            ! sign of local i-gradient of density multiplied by the i-slope 
    218             zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
    219  
    220             zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) )) 
    221             zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1) 
    222          END DO 
    223       END DO 
    224  
     197            zsign = SIGN( 0.5, - zgdrho    * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     198            zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     199            zalphax(ji,jj)=( 0.5 + zsigna ) * ( 0.5 - zsign ) * umask(ji,jj,1) 
     200 
     201            ! local density gradient along j-bathymetric slope 
     202            zgdrho =  ( ztnb(ji,jj+1) - ztnb(ji,jj) ) 
     203            ! sign of local j-gradient of density multiplied by the j-slope 
     204            zsign = SIGN( 0.5, -zgdrho     * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     205            zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     206            zalphay(ji,jj)=( 0.5 + zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
     207         END DO 
     208      END DO 
     209 
     210      CASE ( 2 )               ! Linear formulation function of temperature and salinity 
    225211      DO jj = 1, jpjm1 
    226          DO ji = 1, jpim1 
     212         DO ji = 1, fs_jpim1   ! vector opt.             
     213            ! local density gradient along i-bathymetric slope 
     214            zgdrho = - ( rbeta*( zsnb(ji+1,jj) - zsnb(ji,jj) )   & 
     215               &     -  ralpha*( ztnb(ji+1,jj) - ztnb(ji,jj) ) ) 
     216            ! sign of local i-gradient of density multiplied by the i-slope 
     217            zsign = SIGN( 0.5, - zgdrho    * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     218            zsigna= SIGN( 0.5, zunb(ji,jj) * ( zdep(ji+1,jj) - zdep(ji,jj) ) ) 
     219            zalphax(ji,jj) = ( 0.5 + zsigna ) * ( 0.5 - zsign ) * umask(ji,jj,1) 
     220 
    227221            ! local density gradient along j-bathymetric slope 
    228             zgdrho =  ztnb(ji,jj+1) - ztnb(ji,jj) 
     222            zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) )   & 
     223                   -    ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) )    
    229224            ! sign of local j-gradient of density multiplied by the j-slope 
    230             zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    231  
    232             zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) ) 
    233             zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1) 
    234          END DO 
    235       END DO 
    236  
    237       CASE ( 2 )               ! Linear formulation function of temperature and salinity 
    238  
    239          CALL ctl_stop( '          use of linear eos rho(T,S) = rau0 * ( rbeta * S - ralpha * T )', & 
    240               &         '          bbl not implented: easy to do it ' ) 
     225            zsign = SIGN( 0.5, - zgdrho    * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     226            zsigna= SIGN( 0.5, zvnb(ji,jj) * ( zdep(ji,jj+1) - zdep(ji,jj) ) ) 
     227            zalphay(ji,jj) = ( 0.5 + zsigna ) * ( 0.5 - zsign ) * vmask(ji,jj,1) 
     228         END DO 
     229      END DO 
    241230 
    242231      CASE DEFAULT 
     
    255244 
    256245      ! ... is equal to zero but where bbl will work. 
    257           u_bbl(:,:,:) = 0.e0 
    258           v_bbl(:,:,:) = 0.e0 
     246      u_bbl(:,:,:) = 0.e0 
     247      v_bbl(:,:,:) = 0.e0 
     248 
     249      IF( ln_zps ) THEN     ! partial steps correction    
     250       
     251# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     252         jj = 1 
     253         DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     254# else    
     255         DO jj = 1, jpjm1 
     256            DO ji = 1, jpim1 
     257# endif 
     258               iku  = mbku(ji  ,jj  ) 
     259               ikv  = mbkv(ji  ,jj  )   
     260               iku1 = mbkt(ji+1,jj  ) 
     261               iku2 = mbkt(ji  ,jj  ) 
     262               ikv1 = mbkt(ji  ,jj+1) 
     263               ikv2 = mbkt(ji  ,jj  ) 
     264               ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) )  
     265               ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) )  
     266                
     267               IF( MAX(iku,ikv) >  1 ) THEN 
     268                  u_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * ze3u / fse3u(ji,jj,iku) 
     269                  v_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * ze3v / fse3v(ji,jj,ikv)        
     270               ENDIF 
     271# if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     272            END DO 
     273# endif 
     274         END DO 
     275 
     276         ! lateral boundary conditions on u_bbl and v_bbl   (changed sign) 
     277         CALL lbc_lnk( u_bbl, 'U', -1. )   ;   CALL lbc_lnk( v_bbl, 'V', -1. ) 
     278        
     279      ELSE       ! if not partial step loop over the whole domain no lbc call 
     280 
     281#if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     282         jj = 1 
     283         DO ji = 1, jpij   ! vector opt. (forced unrolling) 
     284#else 
     285         DO jj = 1, jpj 
     286            DO ji = 1, jpi 
     287#endif    
     288               iku = mbku(ji,jj) 
     289               ikv = mbkv(ji,jj) 
     290               IF( MAX(iku,ikv) >  1 ) THEN 
     291                  u_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku)  
     292                  v_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv)        
     293               ENDIF 
     294#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     295            END DO 
     296#endif 
     297         END DO 
     298        
     299      ENDIF 
     300      
     301 
     302      ! 5. Along sigma advective trend 
     303      ! ------------------------------- 
     304      ! ... Second order centered tracer flux at u and v-points 
     305 
    259306# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    260307      jj = 1 
     
    266313            iku = mbku(ji,jj) 
    267314            ikv = mbkv(ji,jj) 
    268             IF( MAX(iku,ikv) >  1 ) THEN 
    269                u_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * umask(ji,jj,1) 
    270                v_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * vmask(ji,jj,1) 
    271             ENDIF 
    272 # if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
    273          END DO 
    274 # endif 
    275           END DO 
    276  
    277       ! lateral boundary conditions on u_bbl and v_bbl   (changed sign) 
    278        CALL lbc_lnk( u_bbl, 'U', -1. )   ;   CALL lbc_lnk( v_bbl, 'V', -1. ) 
    279  
    280       ! 5. Along sigma advective trend 
    281       ! ------------------------------- 
    282       ! ... Second order centered tracer flux at u and v-points 
    283  
    284 # if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    285       jj = 1 
    286       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    287 # else 
    288       DO jj = 1, jpjm1 
    289          DO ji = 1, jpim1 
    290 # endif 
    291             iku = mbku(ji,jj) 
    292             ikv = mbkv(ji,jj) 
    293             zfui = zalphax(ji,jj) *e2u(ji,jj) * fse3u(ji,jj,iku) * zunb(ji,jj) 
    294             zfvj = zalphay(ji,jj) *e1v(ji,jj) * fse3v(ji,jj,ikv) * zvnb(ji,jj) 
     315            zfui = e2u(ji,jj) * fse3u(ji,jj,iku) * u_bbl(ji,jj,iku) 
     316            zfvj = e1v(ji,jj) * fse3v(ji,jj,ikv) * v_bbl(ji,jj,ikv) 
    295317            ! centered scheme 
    296318!           zwx(ji,jj) = 0.5* zfui * ( ztnb(ji,jj) + ztnb(ji+1,jj) ) 
     
    383405 
    384406      ! ... horizontal bottom divergence 
    385 # if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
    386       jj = 1 
    387       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     407 
     408      IF( ln_zps ) THEN 
     409      
     410# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     411         jj = 1 
     412         DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
    388413# else 
    389       DO jj = 1, jpjm1 
    390          DO ji = 1, jpim1 
    391 # endif 
    392             iku = mbku(ji,jj) 
    393             ikv = mbkv(ji,jj) 
    394             zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku)  
    395             zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv)  
    396 #if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
    397          END DO 
    398 #endif 
    399         END DO 
     414         DO jj = 1, jpjm1 
     415            DO ji = 1, jpim1 
     416# endif 
     417               iku  = mbku(ji  ,jj  ) 
     418               ikv  = mbkv(ji  ,jj  )   
     419               iku1 = mbkt(ji+1,jj  ) 
     420               iku2 = mbkt(ji  ,jj  ) 
     421               ikv1 = mbkt(ji  ,jj+1) 
     422               ikv2 = mbkt(ji  ,jj  ) 
     423               ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) )  
     424               ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) )  
     425           
     426               zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * ze3u   
     427               zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * ze3v 
     428#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     429            END DO 
     430#endif 
     431         END DO   
     432    
     433      ELSE 
     434 
     435# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     436         jj = 1 
     437         DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling) 
     438# else 
     439         DO jj = 1, jpjm1 
     440            DO ji = 1, jpim1 
     441# endif 
     442               iku = mbku(ji,jj) 
     443               ikv = mbkv(ji,jj) 
     444               zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku)  
     445               zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv)  
     446#if ! defined key_vectopt_loop   ||   defined key_mpp_omp 
     447            END DO 
     448#endif 
     449         END DO 
     450 
     451      ENDIF 
     452  
    400453 
    401454# if defined key_vectopt_loop   &&   ! defined key_mpp_omp 
     
    409462            zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik) 
    410463            zhdivn(ji,jj,ik) =   & 
    411                &   (  zwu(ji  ,jj  ) * ( zunb(ji  ,jj  ) - un(ji  ,jj  ,ik) *umask(ji  ,jj  ,1) )   & 
    412                &    - zwu(ji-1,jj  ) * ( zunb(ji-1,jj  ) - un(ji-1,jj  ,ik) *umask(ji-1,jj  ,1) )   & 
    413                &    + zwv(ji  ,jj  ) * ( zvnb(ji  ,jj  ) - vn(ji  ,jj  ,ik) *vmask(ji  ,jj  ,1) )   & 
    414                &    - zwv(ji  ,jj-1) * ( zvnb(ji  ,jj-1) - vn(ji  ,jj-1,ik) *vmask(ji  ,jj-1,1) )   & 
     464               &   (  zwu(ji  ,jj  ) * ( zunb(ji  ,jj  ) - un(ji  ,jj  ,ik) )   & 
     465               &    - zwu(ji-1,jj  ) * ( zunb(ji-1,jj  ) - un(ji-1,jj  ,ik) )   & 
     466               &    + zwv(ji  ,jj  ) * ( zvnb(ji  ,jj  ) - vn(ji  ,jj  ,ik) )   & 
     467               &    - zwv(ji  ,jj-1) * ( zvnb(ji  ,jj-1) - vn(ji  ,jj-1,ik) )   & 
    415468               &   ) / zbt 
    416469 
Note: See TracChangeset for help on using the changeset viewer.