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 4616 for branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90 – NEMO

Ignore:
Timestamp:
2014-04-06T17:28:25+02:00 (10 years ago)
Author:
gm
Message:

#1260 : see the associated wiki page for explanation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_CNRS0_NOC1_LDF/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90

    r4292 r4616  
    3737   USE timing         ! Timing 
    3838 
    39  
    4039   IMPLICIT NONE 
    4140   PRIVATE 
     
    4746   PUBLIC   bbl           !  routine called by trcbbl.F90 and dtadyn.F90 
    4847 
    49    LOGICAL, PUBLIC, PARAMETER ::   lk_trabbl = .TRUE.    !: bottom boundary layer flag 
    50  
    51    !                                !!* Namelist nambbl * 
    52    INTEGER , PUBLIC ::   nn_bbl_ldf  !: =1   : diffusive bbl or not (=0) 
    53    INTEGER , PUBLIC ::   nn_bbl_adv  !: =1/2 : advective bbl or not (=0) 
    54    !                                            !  =1 : advective bbl using the bottom ocean velocity 
    55    !                                            !  =2 :     -      -  using utr_bbl proportional to grad(rho) 
    56    REAL(wp), PUBLIC ::   rn_ahtbbl   !: along slope bbl diffusive coefficient [m2/s] 
    57    REAL(wp), PUBLIC ::   rn_gambbl   !: lateral coeff. for bottom boundary layer scheme [s] 
    58  
    59    LOGICAL , PUBLIC ::   l_bbl                  !: flag to compute bbl diffu. flux coef and transport 
     48   !                                  !!* Namelist nambbl * 
     49   LOGICAL , PUBLIC ::   ln_trabbl     !: bottom boundary layer flag 
     50   INTEGER , PUBLIC ::   nn_bbl_ldf    !: =1   : diffusive bbl or not (=0) 
     51   INTEGER , PUBLIC ::   nn_bbl_adv    !: =1/2 : advective bbl or not (=0) 
     52   !                                   !         =1 : advective bbl using the bottom ocean velocity 
     53   !                                   !         =2 :     -      -  using utr_bbl proportional to grad(rho) 
     54   REAL(wp), PUBLIC ::   rn_ahtbbl     !: along slope bbl diffusive coefficient [m2/s] 
     55   REAL(wp), PUBLIC ::   rn_gambbl     !: lateral coeff. for bottom boundary layer scheme [s] 
     56 
     57   LOGICAL , PUBLIC ::   l_bbl         !: flag to compute bbl diffu. flux coef and transport 
    6058 
    6159   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::   utr_bbl  , vtr_bbl   ! u- (v-) transport in the bottom boundary layer 
     
    179177      !!              Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 
    180178      !!---------------------------------------------------------------------- 
    181       ! 
    182179      INTEGER                              , INTENT(in   ) ::   kjpt   ! number of tracers 
    183180      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb    ! before and now tracer fields 
     
    186183      INTEGER  ::   ji, jj, jn   ! dummy loop indices 
    187184      INTEGER  ::   ik           ! local integers 
    188       REAL(wp) ::   zbtr         ! local scalars 
    189185      REAL(wp), POINTER, DIMENSION(:,:) :: zptb 
    190186      !!---------------------------------------------------------------------- 
     
    196192      DO jn = 1, kjpt                                     ! tracer loop 
    197193         !                                                ! =========== 
    198 #  if defined key_vectopt_loop 
    199          DO jj = 1, 1   ! vector opt. (forced unrolling) 
    200             DO ji = 1, jpij 
    201 #else 
    202194         DO jj = 1, jpj 
    203195            DO ji = 1, jpi 
    204 #endif 
    205196               ik = mbkt(ji,jj)                        ! bottom T-level index 
    206197               zptb(ji,jj) = ptb(ji,jj,ik,jn)              ! bottom before T and S 
     
    208199         END DO 
    209200         !                                                ! Compute the trend 
    210 #  if defined key_vectopt_loop 
    211          DO jj = 1, 1   ! vector opt. (forced unrolling) 
    212             DO ji = jpi+1, jpij-jpi-1 
    213 #  else 
    214201         DO jj = 2, jpjm1 
    215202            DO ji = 2, jpim1 
    216 #  endif 
    217203               ik = mbkt(ji,jj)                            ! bottom T-level index 
    218                zbtr = r1_e12t(ji,jj)  / fse3t(ji,jj,ik) 
    219                pta(ji,jj,ik,jn) = pta(ji,jj,ik,jn)                                                         & 
    220                   &               + (   ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )   & 
    221                   &                   - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )   & 
    222                   &                   + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )   & 
    223                   &                   - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )   ) * zbtr 
     204               pta(ji,jj,ik,jn) = pta(ji,jj,ik,jn)                                                  & 
     205                  &             + (  ahu_bbl(ji  ,jj  ) * ( zptb(ji+1,jj  ) - zptb(ji  ,jj  ) )     & 
     206                  &                - ahu_bbl(ji-1,jj  ) * ( zptb(ji  ,jj  ) - zptb(ji-1,jj  ) )     & 
     207                  &                + ahv_bbl(ji  ,jj  ) * ( zptb(ji  ,jj+1) - zptb(ji  ,jj  ) )     & 
     208                  &                - ahv_bbl(ji  ,jj-1) * ( zptb(ji  ,jj  ) - zptb(ji  ,jj-1) )  )  & 
     209                  &             / ( e1e2t(ji,jj) * fse3t(ji,jj,ik) ) 
    224210            END DO 
    225211         END DO 
     
    264250      DO jn = 1, kjpt                                            ! tracer loop 
    265251         !                                                       ! =========== 
    266 # if defined key_vectopt_loop 
    267          DO jj = 1, 1 
    268             DO ji = 1, jpij-jpi-1   ! vector opt. (forced unrolling) 
    269 # else 
    270252         DO jj = 1, jpjm1 
    271253            DO ji = 1, jpim1            ! CAUTION start from i=1 to update i=2 when cyclic east-west 
    272 # endif 
    273254               IF( utr_bbl(ji,jj) /= 0.e0 ) THEN            ! non-zero i-direction bbl advection 
    274255                  ! down-slope i/k-indices (deep)      &   up-slope i/k indices (shelf) 
     
    278259                  ! 
    279260                  !                                               ! up  -slope T-point (shelf bottom point) 
    280                   zbtr = r1_e12t(iis,jj) / fse3t(iis,jj,ikus) 
     261                  zbtr = r1_e1e2t(iis,jj) / fse3t(iis,jj,ikus) 
    281262                  ztra = zu_bbl * ( ptb(iid,jj,ikus,jn) - ptb(iis,jj,ikus,jn) ) * zbtr 
    282263                  pta(iis,jj,ikus,jn) = pta(iis,jj,ikus,jn) + ztra 
    283264                  ! 
    284265                  DO jk = ikus, ikud-1                            ! down-slope upper to down T-point (deep column) 
    285                      zbtr = r1_e12t(iid,jj) / fse3t(iid,jj,jk) 
     266                     zbtr = r1_e1e2t(iid,jj) / fse3t(iid,jj,jk) 
    286267                     ztra = zu_bbl * ( ptb(iid,jj,jk+1,jn) - ptb(iid,jj,jk,jn) ) * zbtr 
    287268                     pta(iid,jj,jk,jn) = pta(iid,jj,jk,jn) + ztra 
    288269                  END DO 
    289270                  ! 
    290                   zbtr = r1_e12t(iid,jj) / fse3t(iid,jj,ikud) 
     271                  zbtr = r1_e1e2t(iid,jj) / fse3t(iid,jj,ikud) 
    291272                  ztra = zu_bbl * ( ptb(iis,jj,ikus,jn) - ptb(iid,jj,ikud,jn) ) * zbtr 
    292273                  pta(iid,jj,ikud,jn) = pta(iid,jj,ikud,jn) + ztra 
     
    300281                  ! 
    301282                  ! up  -slope T-point (shelf bottom point) 
    302                   zbtr = r1_e12t(ji,ijs) / fse3t(ji,ijs,ikvs) 
     283                  zbtr = r1_e1e2t(ji,ijs) / fse3t(ji,ijs,ikvs) 
    303284                  ztra = zv_bbl * ( ptb(ji,ijd,ikvs,jn) - ptb(ji,ijs,ikvs,jn) ) * zbtr 
    304285                  pta(ji,ijs,ikvs,jn) = pta(ji,ijs,ikvs,jn) + ztra 
    305286                  ! 
    306287                  DO jk = ikvs, ikvd-1                            ! down-slope upper to down T-point (deep column) 
    307                      zbtr = r1_e12t(ji,ijd) / fse3t(ji,ijd,jk) 
     288                     zbtr = r1_e1e2t(ji,ijd) / fse3t(ji,ijd,jk) 
    308289                     ztra = zv_bbl * ( ptb(ji,ijd,jk+1,jn) - ptb(ji,ijd,jk,jn) ) * zbtr 
    309290                     pta(ji,ijd,jk,jn) = pta(ji,ijd,jk,jn)  + ztra 
    310291                  END DO 
    311292                  !                                               ! down-slope T-point (deep bottom point) 
    312                   zbtr = r1_e12t(ji,ijd) / fse3t(ji,ijd,ikvd) 
     293                  zbtr = r1_e1e2t(ji,ijd) / fse3t(ji,ijd,ikvd) 
    313294                  ztra = zv_bbl * ( ptb(ji,ijs,ikvs,jn) - ptb(ji,ijd,ikvd,jn) ) * zbtr 
    314295                  pta(ji,ijd,ikvd,jn) = pta(ji,ijd,ikvd,jn) + ztra 
     
    353334      !!              Campin, J.-M., and H. Goosse, 1999, Tellus, 412-430. 
    354335      !!---------------------------------------------------------------------- 
    355       ! 
    356336      INTEGER         , INTENT(in   ) ::   kt       ! ocean time-step index 
    357337      INTEGER         , INTENT(in   ) ::   kit000          ! first time step index 
     
    412392 
    413393      !                                        !* bottom temperature, salinity, velocity and depth 
    414 #if defined key_vectopt_loop 
    415       DO jj = 1, 1   ! vector opt. (forced unrolling) 
    416          DO ji = 1, jpij 
    417 #else 
    418394      DO jj = 1, jpj 
    419395         DO ji = 1, jpi 
    420 #endif 
    421396            ik = mbkt(ji,jj)                        ! bottom T-level index 
    422397            ztb (ji,jj) = tsb(ji,jj,ik,jp_tem) * tmask(ji,jj,1)      ! bottom before T and S 
     
    629604 
    630605      !                             !* masked diffusive flux coefficients 
    631       ahu_bbl_0(:,:) = rn_ahtbbl * e2u(:,:) * e3u_bbl_0(:,:) / e1u(:,:) * umask(:,:,1) 
    632       ahv_bbl_0(:,:) = rn_ahtbbl * e1v(:,:) * e3v_bbl_0(:,:) / e2v(:,:) * vmask(:,:,1) 
     606      ahu_bbl_0(:,:) = rn_ahtbbl * e2_e1u(:,:) * e3u_bbl_0(:,:) * umask(:,:,1) 
     607      ahv_bbl_0(:,:) = rn_ahtbbl * e1_e2v(:,:) * e3v_bbl_0(:,:) * vmask(:,:,1) 
    633608 
    634609 
Note: See TracChangeset for help on using the changeset viewer.