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 3211 for branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90 – NEMO

Ignore:
Timestamp:
2011-12-11T16:00:26+01:00 (13 years ago)
Author:
spickles2
Message:

Stephen Pickles, 11 Dec 2011

Commit to bring the rest of the DCSE NEMO development branch
in line with the latest development version. This includes
array index re-ordering of all OPA_SRC/.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r2715 r3211  
    3939   LOGICAL , PUBLIC, PARAMETER ::   lk_zdfgls = .TRUE.   !: TKE vertical mixing flag 
    4040   ! 
    41    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en      !: now turbulent kinetic energy 
    42    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   mxln    !: now mixing length 
    43    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   zwall   !: wall function 
    44    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustars2 !: Squared surface velocity scale at T-points 
    45    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustarb2 !: Squared bottom  velocity scale at T-points 
     41   !! DCSE_NEMO: does not need to be public 
     42!  REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en      !: now turbulent kinetic energy 
     43   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en      !: now turbulent kinetic energy 
     44 
     45   !! DCSE_NEMO: does not need to be public 
     46!  REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   mxln    !: now mixing length 
     47   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   mxln    !: now mixing length 
     48 
     49   !! DCSE_NEMO: does not need to be public 
     50!  REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   zwall   !: wall function 
     51   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   zwall   !: wall function 
     52 
     53   !! DCSE_NEMO: does not need to be public 
     54!  REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustars2 !: Squared surface velocity scale at T-points 
     55   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustars2 !: Squared surface velocity scale at T-points 
     56 
     57   !! DCSE_NEMO: does not need to be public 
     58!  REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustarb2 !: Squared bottom  velocity scale at T-points 
     59   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ustarb2 !: Squared bottom  velocity scale at T-points 
    4660 
    4761   !                                         !!! ** Namelist  namzdf_gls  ** 
     
    102116   REAL(wp) ::   rpsi3m, rpsi3p, rpp, rmm, rnn                    !     -           -           -        - 
    103117 
     118   !! * Control permutation of array indices 
     119#  include "oce_ftrans.h90" 
     120#  include "dom_oce_ftrans.h90" 
     121#  include "domvvl_ftrans.h90" 
     122#  include "zdf_oce_ftrans.h90" 
     123#  include "sbc_oce_ftrans.h90" 
     124!! DCSE_NEMO: private module variables do not need their own directives file 
     125!FTRANS en mxln zwall :I :I :z 
     126 
    104127   !! * Substitutions 
    105128#  include "domzgr_substitute.h90" 
     
    144167      USE wrk_nemo, ONLY: eps       => wrk_3d_4   ! dissipation rate 
    145168      USE wrk_nemo, ONLY: zwall_psi => wrk_3d_5   ! Wall function use in the wb case (ln_sigpsi.AND.ln_crban=T) 
     169 
     170      !! DCSE_NEMO: need additional directives for renamed module variables 
     171!FTRANS z_elem_a z_elem_b z_elem_c psi :I :I :z 
     172!FTRANS eb mxlb shear eps zwall_psi :I :I :z 
    146173      ! 
    147174      INTEGER, INTENT(in) ::   kt ! ocean time step 
     
    169196            !  
    170197            ! surface friction  
     198#if defined key_z_first 
     199            ustars2(ji,jj) = rau0r * taum(ji,jj) * tmask_1(ji,jj) 
     200#else 
    171201            ustars2(ji,jj) = rau0r * taum(ji,jj) * tmask(ji,jj,1) 
     202#endif 
    172203            ! 
    173204            ! bottom friction (explicit before friction) 
    174205            ! Note that we chose here not to bound the friction as in dynbfr) 
     206#if defined key_z_first 
     207            ztx2 = (  bfrua(ji,jj)  * ub(ji,jj,mbku(ji,jj)) + bfrua(ji-1,jj) * ub(ji-1,jj,mbku(ji-1,jj))  )   & 
     208               & * ( 1._wp - 0.5_wp * umask_1(ji,jj) * umask_1(ji-1,jj)  ) 
     209            zty2 = (  bfrva(ji,jj)  * vb(ji,jj,mbkv(ji,jj)) + bfrva(ji,jj-1) * vb(ji,jj-1,mbkv(ji,jj-1))  )   & 
     210               & * ( 1._wp - 0.5_wp * vmask_1(ji,jj) * vmask_1(ji,jj-1)  ) 
     211            ustarb2(ji,jj) = SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask_1(ji,jj) 
     212#else 
    175213            ztx2 = (  bfrua(ji,jj)  * ub(ji,jj,mbku(ji,jj)) + bfrua(ji-1,jj) * ub(ji-1,jj,mbku(ji-1,jj))  )   & 
    176214               & * ( 1._wp - 0.5_wp * umask(ji,jj,1) * umask(ji-1,jj,1)  ) 
     
    178216               & * ( 1._wp - 0.5_wp * vmask(ji,jj,1) * vmask(ji,jj-1,1)  ) 
    179217            ustarb2(ji,jj) = SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask(ji,jj,1) 
     218#endif 
    180219         END DO 
    181220      END DO   
     
    188227 
    189228      ! Compute shear and dissipation rate 
     229#if defined key_z_first 
     230      DO jj = 2, jpjm1 
     231         DO ji = 2, jpim1 
     232            DO jk = 2, jpkm1 
     233#else 
    190234      DO jk = 2, jpkm1 
    191235         DO jj = 2, jpjm1 
    192236            DO ji = fs_2, fs_jpim1   ! vector opt. 
     237#endif 
    193238               avmu(ji,jj,jk) = avmu(ji,jj,jk) * ( un(ji,jj,jk-1) - un(ji,jj,jk) )   & 
    194239                  &                            * ( ub(ji,jj,jk-1) - ub(ji,jj,jk) )   & 
     
    212257 
    213258      IF( nn_clos == 0 ) THEN    ! Mellor-Yamada 
     259#if defined key_z_first 
     260         DO jj = 2, jpjm1  
     261            DO ji = 2, jpim1 
     262               DO jk = 2, jpkm1 
     263#else 
    214264         DO jk = 2, jpkm1 
    215265            DO jj = 2, jpjm1  
    216266               DO ji = fs_2, fs_jpim1   ! vector opt. 
     267#endif 
    217268                  zup   = mxln(ji,jj,jk) * fsdepw(ji,jj,mbkt(ji,jj)+1) 
    218269                  zdown = vkarmn * fsdepw(ji,jj,jk) * ( -fsdepw(ji,jj,jk) + fsdepw(ji,jj,mbkt(ji,jj)+1) ) 
     
    237288      ! Warning : after this step, en : right hand side of the matrix 
    238289 
     290#if defined key_z_first 
     291      DO jj = 2, jpjm1 
     292         DO ji = 2, jpim1 
     293            DO jk = 2, jpkm1 
     294#else 
    239295      DO jk = 2, jpkm1 
    240296         DO jj = 2, jpjm1 
    241297            DO ji = fs_2, fs_jpim1   ! vector opt. 
     298#endif 
    242299               ! 
    243300               ! shear prod. at w-point weightened by mask 
     
    422479      ! ---------------------------------------------------------- 
    423480      ! 
     481#if defined key_z_first 
     482      DO jj = 2, jpjm1 
     483         DO ji = 2, jpim1 
     484            DO jk = 2, jpkm1                       ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
     485#else 
    424486      DO jk = 2, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    425487         DO jj = 2, jpjm1 
    426488            DO ji = fs_2, fs_jpim1    ! vector opt. 
     489#endif 
    427490               z_elem_b(ji,jj,jk) = z_elem_b(ji,jj,jk) - z_elem_a(ji,jj,jk) * z_elem_c(ji,jj,jk-1) / z_elem_b(ji,jj,jk-1) 
    428491            END DO 
    429492         END DO 
    430493      END DO 
     494#if defined key_z_first 
     495      DO jj = 2, jpjm1 
     496         DO ji = 2, jpim1 
     497            DO jk = 2, jpk                         ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
     498#else 
    431499      DO jk = 2, jpk                               ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    432500         DO jj = 2, jpjm1 
    433501            DO ji = fs_2, fs_jpim1    ! vector opt. 
     502#endif 
    434503               z_elem_a(ji,jj,jk) = en(ji,jj,jk) - z_elem_a(ji,jj,jk) / z_elem_b(ji,jj,jk-1) * z_elem_a(ji,jj,jk-1) 
    435504            END DO 
    436505         END DO 
    437506      END DO 
    438       DO jk = jpk-1, 2, -1                         ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     507#if defined key_z_first 
     508      DO jj = 2, jpjm1 
     509         DO ji = 2, jpim1 
     510            DO jk = jpk-1, 2, -1                   ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     511#else 
     512      DO jk = jpk-1, 2, -1                         ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    439513         DO jj = 2, jpjm1 
    440514            DO ji = fs_2, fs_jpim1    ! vector opt. 
     515#endif 
    441516               en(ji,jj,jk) = ( z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk) * en(ji,jj,jk+1) ) / z_elem_b(ji,jj,jk) 
    442517            END DO 
     
    455530      ! 
    456531      CASE( 0 )               ! k-kl  (Mellor-Yamada) 
     532#if defined key_z_first 
     533         DO jj = 2, jpjm1 
     534            DO ji = 2, jpim1 
     535               DO jk = 2, jpkm1 
     536#else 
    457537         DO jk = 2, jpkm1 
    458538            DO jj = 2, jpjm1 
    459539               DO ji = fs_2, fs_jpim1   ! vector opt. 
     540#endif 
    460541                  psi(ji,jj,jk)  = en(ji,jj,jk) * mxln(ji,jj,jk) 
    461542               END DO 
     
    464545         ! 
    465546      CASE( 1 )               ! k-eps 
     547#if defined key_z_first 
     548         DO jj = 2, jpjm1 
     549            DO ji = 2, jpim1 
     550               DO jk = 2, jpkm1 
     551#else 
    466552         DO jk = 2, jpkm1 
    467553            DO jj = 2, jpjm1 
    468554               DO ji = fs_2, fs_jpim1   ! vector opt. 
     555#endif 
    469556                  psi(ji,jj,jk)  = eps(ji,jj,jk) 
    470557               END DO 
     
    473560         ! 
    474561      CASE( 2 )               ! k-w 
     562#if defined key_z_first 
     563         DO jj = 2, jpjm1 
     564            DO ji = 2, jpim1 
     565               DO jk = 2, jpkm1 
     566#else 
    475567         DO jk = 2, jpkm1 
    476568            DO jj = 2, jpjm1 
    477569               DO ji = fs_2, fs_jpim1   ! vector opt. 
     570#endif 
    478571                  psi(ji,jj,jk)  = SQRT( en(ji,jj,jk) ) / ( rc0 * mxln(ji,jj,jk) ) 
    479572               END DO 
     
    482575         ! 
    483576      CASE( 3 )               ! generic 
     577#if defined key_z_first 
     578         DO jj = 2, jpjm1 
     579            DO ji = 2, jpim1 
     580               DO jk = 2, jpkm1 
     581#else 
    484582         DO jk = 2, jpkm1 
    485583            DO jj = 2, jpjm1 
    486584               DO ji = fs_2, fs_jpim1   ! vector opt. 
     585#endif 
    487586                  psi(ji,jj,jk)  = rc02 * en(ji,jj,jk) * mxln(ji,jj,jk)**rnn  
    488587               END DO 
     
    499598      ! Warning : after this step, en : right hand side of the matrix 
    500599 
     600#if defined key_z_first 
     601      DO jj = 2, jpjm1 
     602         DO ji = 2, jpim1 
     603            DO jk = 2, jpkm1 
     604#else 
    501605      DO jk = 2, jpkm1 
    502606         DO jj = 2, jpjm1 
    503607            DO ji = fs_2, fs_jpim1   ! vector opt. 
     608#endif 
    504609               ! 
    505610               ! psi / k 
     
    556661            !                      ! balance between the production and the dissipation terms including the wave effect 
    557662            zdep(:,:) = rl_sf * zhsro(:,:) 
     663#if defined key_z_first 
     664            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask_1(:,:) 
     665#else 
    558666            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     667#endif 
    559668            z_elem_a(:,:,1) = psi(:,:,1) 
    560669            z_elem_c(:,:,1) = 0._wp 
     
    565674            zex2 = (rmm*ra_sf) 
    566675            zdep(:,:) = ( (zhsro(:,:) + fsdepw(:,:,2))**zex1 ) / zhsro(:,:)**zex2 
     676#if defined key_z_first 
     677            psi (:,:,2) = rsbc_psi1 * ustars2(:,:)**rmm * zdep(:,:) * tmask_1(:,:) 
     678#else 
    567679            psi (:,:,2) = rsbc_psi1 * ustars2(:,:)**rmm * zdep(:,:) * tmask(:,:,1) 
     680#endif 
    568681            z_elem_a(:,:,2) = 0._wp 
    569682            z_elem_c(:,:,2) = 0._wp 
     
    575688            ! 
    576689            zdep(:,:) = vkarmn * zhsro(:,:) 
     690#if defined key_z_first 
     691            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask_1(:,:) 
     692#else 
    577693            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     694#endif 
    578695            z_elem_a(:,:,1) = psi(:,:,1) 
    579696            z_elem_c(:,:,1) = 0._wp 
     
    582699            ! one level below 
    583700            zdep(:,:) = vkarmn * ( zhsro(:,:) + fsdepw(:,:,2) ) 
     701#if defined key_z_first 
     702            psi (:,:,2) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask_1(:,:) 
     703#else 
    584704            psi (:,:,2) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     705#endif 
    585706            z_elem_a(:,:,2) = 0._wp 
    586707            z_elem_c(:,:,2) = 0._wp 
     
    594715            ! 
    595716            zdep(:,:) = rl_sf * zhsro(:,:) 
     717#if defined key_z_first 
     718            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask_1(:,:) 
     719#else 
    596720            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     721#endif 
    597722            z_elem_a(:,:,1) = psi(:,:,1) 
    598723            z_elem_c(:,:,1) = 0._wp 
     
    612737            ! 
    613738            zdep(:,:) = vkarmn * zhsro(:,:) 
     739#if defined key_z_first 
     740            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask_1(:,:) 
     741#else 
    614742            psi (:,:,1) = rc0**rpp * en(:,:,1)**rmm * zdep(:,:)**rnn * tmask(:,:,1) 
     743#endif 
    615744            z_elem_a(:,:,1) = psi(:,:,1) 
    616745            z_elem_c(:,:,1) = 0._wp 
     
    693822      ! ---------------- 
    694823      ! 
     824#if defined key_z_first 
     825      DO jj = 2, jpjm1 
     826         DO ji = 2, jpim1 
     827            DO jk = 2, jpkm1                       ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
     828#else 
    695829      DO jk = 2, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    696830         DO jj = 2, jpjm1 
    697831            DO ji = fs_2, fs_jpim1    ! vector opt. 
     832#endif 
    698833               z_elem_b(ji,jj,jk) = z_elem_b(ji,jj,jk) - z_elem_a(ji,jj,jk) * z_elem_c(ji,jj,jk-1) / z_elem_b(ji,jj,jk-1) 
    699834            END DO 
    700835         END DO 
    701836      END DO 
     837#if defined key_z_first 
     838      DO jj = 2, jpjm1 
     839         DO ji = 2, jpim1 
     840            DO jk = 2, jpk                         ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
     841#else 
    702842      DO jk = 2, jpk                               ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    703843         DO jj = 2, jpjm1 
    704844            DO ji = fs_2, fs_jpim1    ! vector opt. 
     845#endif 
    705846               z_elem_a(ji,jj,jk) = psi(ji,jj,jk) - z_elem_a(ji,jj,jk) / z_elem_b(ji,jj,jk-1) * z_elem_a(ji,jj,jk-1) 
    706847            END DO 
    707848         END DO 
    708849      END DO 
     850#if defined key_z_first 
     851      DO jj = 2, jpjm1 
     852         DO ji = 2, jpim1 
     853            DO jk = jpk-1, 2, -1                   ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
     854#else 
    709855      DO jk = jpk-1, 2, -1                         ! Third recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    710856         DO jj = 2, jpjm1 
    711857            DO ji = fs_2, fs_jpim1    ! vector opt. 
     858#endif 
    712859               psi(ji,jj,jk) = ( z_elem_a(ji,jj,jk) - z_elem_c(ji,jj,jk) * psi(ji,jj,jk+1) ) / z_elem_b(ji,jj,jk) 
    713860            END DO 
     
    721868      ! 
    722869      CASE( 0 )               ! k-kl  (Mellor-Yamada) 
     870#if defined key_z_first 
     871         DO jj = 2, jpjm1 
     872            DO ji = 2, jpim1 
     873               DO jk = 1, jpkm1 
     874#else 
    723875         DO jk = 1, jpkm1 
    724876            DO jj = 2, jpjm1 
    725877               DO ji = fs_2, fs_jpim1   ! vector opt. 
     878#endif 
    726879                  eps(ji,jj,jk) = rc03 * en(ji,jj,jk) * en(ji,jj,jk) * SQRT( en(ji,jj,jk) ) / psi(ji,jj,jk) 
    727880               END DO 
     
    730883         ! 
    731884      CASE( 1 )               ! k-eps 
     885#if defined key_z_first 
     886         DO jj = 2, jpjm1 
     887            DO ji = 2, jpim1 
     888               DO jk = 1, jpkm1 
     889#else 
    732890         DO jk = 1, jpkm1 
    733891            DO jj = 2, jpjm1 
    734892               DO ji = fs_2, fs_jpim1   ! vector opt. 
     893#endif 
    735894                  eps(ji,jj,jk) = psi(ji,jj,jk) 
    736895               END DO 
     
    739898         ! 
    740899      CASE( 2 )               ! k-w 
     900#if defined key_z_first 
     901         DO jj = 2, jpjm1 
     902            DO ji = 2, jpim1 
     903               DO jk = 1, jpkm1 
     904#else 
    741905         DO jk = 1, jpkm1 
    742906            DO jj = 2, jpjm1 
    743907               DO ji = fs_2, fs_jpim1   ! vector opt. 
     908#endif 
    744909                  eps(ji,jj,jk) = rc04 * en(ji,jj,jk) * psi(ji,jj,jk)  
    745910               END DO 
     
    751916         zex1  =      ( 1.5_wp + rmm/rnn ) 
    752917         zex2  = -1._wp / rnn 
     918#if defined key_z_first 
     919         DO jj = 2, jpjm1 
     920            DO ji = 2, jpim1 
     921                DO jk = 1, jpkm1 
     922#else 
    753923         DO jk = 1, jpkm1 
    754924            DO jj = 2, jpjm1 
    755925               DO ji = fs_2, fs_jpim1   ! vector opt. 
     926#endif 
    756927                  eps(ji,jj,jk) = zcoef * en(ji,jj,jk)**zex1 * psi(ji,jj,jk)**zex2 
    757928               END DO 
     
    763934      ! Limit dissipation rate under stable stratification 
    764935      ! -------------------------------------------------- 
     936#if defined key_z_first 
     937      DO jj = 2, jpjm1 
     938         DO ji = 2, jpim1 
     939            DO jk = 1, jpkm1 ! Note that this set boundary conditions on mxln at the same time 
     940#else 
    765941      DO jk = 1, jpkm1 ! Note that this set boundary conditions on mxln at the same time 
    766942         DO jj = 2, jpjm1 
    767943            DO ji = fs_2, fs_jpim1    ! vector opt. 
     944#endif 
    768945               ! limitation 
    769946               eps(ji,jj,jk)  = MAX( eps(ji,jj,jk), rn_epsmin ) 
     
    783960      ! 
    784961      CASE ( 0 , 1 )             ! Galperin or Kantha-Clayson stability functions 
     962#if defined key_z_first 
     963         DO jj = 2, jpjm1 
     964            DO ji = 2, jpim1 
     965               DO jk = 2, jpkm1 
     966#else 
    785967         DO jk = 2, jpkm1 
    786968            DO jj = 2, jpjm1 
    787969               DO ji = fs_2, fs_jpim1   ! vector opt. 
     970#endif 
    788971                  ! zcof =  l²/q² 
    789972                  zcof = mxlb(ji,jj,jk) * mxlb(ji,jj,jk) / ( 2._wp*eb(ji,jj,jk) ) 
     
    804987         ! 
    805988      CASE ( 2, 3 )               ! Canuto stability functions 
     989#if defined key_z_first 
     990         DO jj = 2, jpjm1 
     991            DO ji = 2, jpim1 
     992               DO jk = 2, jpkm1 
     993#else 
    806994         DO jk = 2, jpkm1 
    807995            DO jj = 2, jpjm1 
    808996               DO ji = fs_2, fs_jpim1   ! vector opt. 
     997#endif 
    809998                  ! zcof =  l²/q² 
    810999                  zcof = mxlb(ji,jj,jk)*mxlb(ji,jj,jk) / ( 2._wp * eb(ji,jj,jk) ) 
     
    8501039      ! Compute diffusivities/viscosities 
    8511040      ! The computation below could be restrained to jk=2 to jpkm1 if GOTM style Dirichlet conditions are used 
     1041#if defined key_z_first 
     1042      DO jj = 2, jpjm1 
     1043         DO ji = 2, jpim1 
     1044            DO jk = 1, jpk 
     1045#else 
     1046      DO jk = 1, jpk 
     1047         DO jj = 2, jpjm1 
     1048            DO ji = fs_2, fs_jpim1   ! vector opt. 
     1049#endif 
    8521050      DO jk = 1, jpk 
    8531051         DO jj = 2, jpjm1 
     
    8661064      CALL lbc_lnk( avm, 'W', 1. )   ;   CALL lbc_lnk( avt, 'W', 1. ) 
    8671065 
     1066#if defined key_z_first 
     1067      DO jj = 2, jpjm1 
     1068         DO ji = 2, jpim1 
     1069            DO jk = 2, jpkm1      !* vertical eddy viscosity at u- and v-points 
     1070#else 
    8681071      DO jk = 2, jpkm1            !* vertical eddy viscosity at u- and v-points 
    8691072         DO jj = 2, jpjm1 
    8701073            DO ji = fs_2, fs_jpim1   ! vector opt. 
     1074#endif 
    8711075               avmu(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
    8721076               avmv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
     
    8871091      ! 
    8881092   END SUBROUTINE zdf_gls 
    889  
     1093       
     1094   !! * Reset control of array index permutation 
     1095!FTRANS CLEAR 
     1096#  include "oce_ftrans.h90" 
     1097#  include "dom_oce_ftrans.h90" 
     1098#  include "domvvl_ftrans.h90" 
     1099#  include "zdf_oce_ftrans.h90" 
     1100#  include "sbc_oce_ftrans.h90" 
     1101!! DCSE_NEMO: private module variables do not need their own directives file 
     1102!FTRANS en mxln zwall :I :I :z 
    8901103 
    8911104   SUBROUTINE zdf_gls_init 
     
    9071120      USE trazdf_exp 
    9081121      ! 
    909       INTEGER ::   jk    ! dummy loop indices 
    910       REAL(wp)::   zcr   ! local scalar 
     1122      INTEGER ::   ji, jj, jk    ! dummy loop indices 
     1123      REAL(wp)::   zcr           ! local scalar 
    9111124      !! 
    9121125      NAMELIST/namzdf_gls/rn_emin, rn_epsmin, ln_length_lim, & 
     
    11751388 
    11761389      !                                !* set vertical eddy coef. to the background value 
     1390#if defined key_z_first 
     1391      DO jj = 1, jpj 
     1392         DO ji = 1, jpi 
     1393            DO jk = 1, jpk 
     1394               avt (ji,jj,jk) = avtb(jk) * tmask(ji,jj,jk) 
     1395               avm (ji,jj,jk) = avmb(jk) * tmask(ji,jj,jk) 
     1396               avmu(ji,jj,jk) = avmb(jk) * umask(ji,jj,jk) 
     1397               avmv(ji,jj,jk) = avmb(jk) * vmask(ji,jj,jk) 
     1398            END DO 
     1399         END DO 
     1400      END DO 
     1401#else 
    11771402      DO jk = 1, jpk 
    11781403         avt (:,:,jk) = avtb(jk) * tmask(:,:,jk) 
     
    11811406         avmv(:,:,jk) = avmb(jk) * vmask(:,:,jk) 
    11821407      END DO 
     1408#endif 
    11831409      !                               
    11841410      CALL gls_rst( nit000, 'READ' )   !* read or initialize all required files 
Note: See TracChangeset for help on using the changeset viewer.