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 4812 for branches/2014/dev_r4650_UKMO2_ice_shelves – NEMO

Ignore:
Timestamp:
2014-10-09T19:31:07+02:00 (10 years ago)
Author:
mathiot
Message:

UKMO02 ISF: correction of some TOP/ and OFF/ files (compilation and SETTE issues) + correction of bdyvol + slope of iso. beneath ice shelf + top friction in dynzdf_imp + minor change in zdfddm

Location:
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OFF_SRC/domain.F90

    r4624 r4812  
    335335      INTEGER ::   ios 
    336336      !! 
    337       NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco 
     337      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco, ln_isfcav 
    338338      !!---------------------------------------------------------------------- 
    339339 
     
    352352         WRITE(numout,*) '~~~~~~~' 
    353353         WRITE(numout,*) '          Namelist namzgr : set vertical coordinate' 
    354          WRITE(numout,*) '             z-coordinate - full steps      ln_zco = ', ln_zco 
    355          WRITE(numout,*) '             z-coordinate - partial steps   ln_zps = ', ln_zps 
    356          WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco = ', ln_sco 
     354         WRITE(numout,*) '             z-coordinate - full steps      ln_zco    = ', ln_zco 
     355         WRITE(numout,*) '             z-coordinate - partial steps   ln_zps    = ', ln_zps 
     356         WRITE(numout,*) '             s- or hybrid z-s-coordinate    ln_sco    = ', ln_sco 
     357         WRITE(numout,*) '             ice shelf cavity               ln_isfcav = ', ln_isfcav 
    357358      ENDIF 
    358359 
     
    361362      IF( ln_zps ) ioptio = ioptio + 1 
    362363      IF( ln_sco ) ioptio = ioptio + 1 
    363       IF ( ioptio /= 1 )   CALL ctl_stop( ' none or several vertical coordinate options used' ) 
     364      IF( ln_isfcav ) ioptio = 33 
     365      IF ( ioptio /= 1  )   CALL ctl_stop( ' none or several vertical coordinate options used' ) 
     366      IF ( ioptio == 33 )   CALL ctl_stop( ' isf cavity with off line module not yet done    ' ) 
    364367 
    365368   END SUBROUTINE dom_zgr 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OFF_SRC/domrea.F90

    r4569 r4812  
    164164 
    165165         CALL iom_get( inum4, jpdom_data, 'mbathy', zmbk )              ! number of ocean t-points 
    166          mbathy(:,:) = INT( zmbk(:,:) ) 
     166         mbathy (:,:) = INT( zmbk(:,:) ) 
     167         misfdep(:,:) = 1                                               ! ice shelf case not yet done 
    167168          
    168169         CALL zgr_bot_level                                             ! mbk. arrays (deepest ocean t-, u- & v-points 
     
    371372      ! 
    372373      mbkt(:,:) = MAX( mbathy(:,:) , 1 )    ! bottom k-index of T-level (=1 over land) 
     374      mikt(:,:) = 1 ; miku(:,:) = 1; mikv(:,:) = 1; ! top k-index of T-level (=1 over open ocean; >1 beneath ice shelf) 
    373375      !                                     ! bottom k-index of W-level = mbkt+1 
    374376      DO jj = 1, jpjm1                      ! bottom k-index of u- (v-) level 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90

    r4624 r4812  
    537537      CALL eos( pts, rhd, rhop, gdept_0(:,:,:) )   ! Time-filtered in situ density  
    538538      CALL bn2( pts, rn2 )         ! before Brunt-Vaisala frequency 
    539       IF( ln_zps )   & 
    540          &  CALL zps_hde( kt, jpts, pts, gtsu, gtsv, rhd, gru, grv )  ! Partial steps: before Horizontal DErivative 
     539      IF( ln_zps )   & ! Partial steps: before Horizontal DErivative 
     540        &    CALL zps_hde( kt, jpts, pts, gtsu, gtsv,  &        ! Partial steps: before horizontal gradient 
     541        &                                        rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv ,   &             ! 
     542        &                                 gtui, gtvi, grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi    )  ! of t, s, rd at the last ocean level 
     543        ! only gtsu, gtsv, rhd, gru , grv are used  
     544 
     545 
    541546         !                                                            ! of t, s, rd at the bottom ocean level 
    542547      CALL zdf_mxl( kt )            ! mixed layer depth 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/BDY/bdyvol.F90

    r4292 r4812  
    1717   USE timing          ! Timing 
    1818   USE oce             ! ocean dynamics and tracers  
     19   USE sbcisf          ! ice shelf 
    1920   USE dom_oce         ! ocean space and time domain  
    2021   USE phycst          ! physical constants 
     
    9091      ! Calculate the cumulate surface Flux z_cflxemp (m3/s) over all the domain 
    9192      ! ----------------------------------------------------------------------- 
    92       z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
     93      z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:)+rdivisf*fwfisf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) ) / rau0 
    9394      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )     ! sum over the global domain 
    9495 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r4704 r4812  
    114114               ikbu = miku(ji,jj)       ! ocean top level at u- and v-points  
    115115               ikbv = mikv(ji,jj)       ! (first wet ocean u- and v-points) 
    116                IF (ikbu .GE. 2) avmu(ji,jj,ikbu-1) = -tfrua(ji,jj) * fse3uw(ji,jj,ikbu-1) 
    117                IF (ikbv .GE. 2) avmv(ji,jj,ikbv-1) = -tfrva(ji,jj) * fse3vw(ji,jj,ikbv-1) 
     116               IF (ikbu .GE. 2) avmu(ji,jj,ikbu) = -tfrua(ji,jj) * fse3uw(ji,jj,ikbu) 
     117               IF (ikbv .GE. 2) avmv(ji,jj,ikbv) = -tfrva(ji,jj) * fse3vw(ji,jj,ikbv) 
    118118            END DO 
    119119         END DO 
     
    176176               zzwi          = zcoef * avmu (ji,jj,jk  ) / fse3uw(ji,jj,jk  ) 
    177177               zwi(ji,jj,jk) = zzwi  * umask(ji,jj,jk) 
    178                zzws          = zcoef * avmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1) 
     178               zzws          = zcoef * avmu (ji,jj,jk+1) / fse3uw(ji,jj,jk+1)  
    179179               zws(ji,jj,jk) = zzws  * umask(ji,jj,jk+1) 
    180180               zwd(ji,jj,jk) = 1._wp - zwi(ji,jj,jk) - zzws 
     
    184184      DO jj = 2, jpjm1        ! Surface boundary conditions 
    185185         DO ji = fs_2, fs_jpim1   ! vector opt. 
    186             zwi(ji,jj,miku(ji,jj)) = 0._wp 
    187             zwd(ji,jj,miku(ji,jj)) = 1._wp - zws(ji,jj,miku(ji,jj)) 
     186            zwi(ji,jj,1) = 0._wp 
     187            zwd(ji,jj,1) = 1._wp - zws(ji,jj,1) 
    188188         END DO 
    189189      END DO 
     
    275275      DO jj = 2, jpjm1        ! Surface boundary conditions 
    276276         DO ji = fs_2, fs_jpim1   ! vector opt. 
    277             zwi(ji,jj,mikv(ji,jj)) = 0._wp 
    278             zwd(ji,jj,mikv(ji,jj)) = 1._wp - zws(ji,jj,mikv(ji,jj)) 
     277            zwi(ji,jj,1) = 0._wp 
     278            zwd(ji,jj,1) = 1._wp - zws(ji,jj,1) 
    279279         END DO 
    280280      END DO 
     
    306306      DO jj = 2, jpjm1        !==  second recurrence:    SOLk = RHSk - Lk / Dk-1  Lk-1  == 
    307307         DO ji = fs_2, fs_jpim1   ! vector opt. 
    308             ze3va =  ( 1._wp - r_vvl ) * fse3v_n(ji,jj,1) + r_vvl   * fse3v_a(ji,jj,1)  
     308            ze3va =  ( 1._wp - r_vvl ) * fse3v_n(ji,jj,mikv(ji,jj)) + r_vvl   * fse3v_a(ji,jj,mikv(ji,jj))  
    309309#if defined key_dynspg_ts             
    310310            va(ji,jj,mikv(ji,jj)) = va(ji,jj,mikv(ji,jj)) + p2dt * 0.5_wp * ( vtau_b(ji,jj) + vtau(ji,jj) )   & 
     
    349349      IF( ln_bfrimp ) THEN 
    350350# if defined key_vectopt_loop 
    351       DO jj = 1, 1 
    352          DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
     351        DO jj = 1, 1 
     352           DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
    353353# else 
    354       DO jj = 2, jpjm1 
    355          DO ji = 2, jpim1 
     354        DO jj = 2, jpjm1 
     355           DO ji = 2, jpim1 
    356356# endif 
    357             ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
    358             ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
    359             avmu(ji,jj,ikbu+1) = 0.e0 
    360             avmv(ji,jj,ikbv+1) = 0.e0 
    361             ikbu = miku(ji,jj)         ! ocean top level at u- and v-points  
    362             ikbv = mikv(ji,jj)         ! (first wet ocean u- and v-points) 
    363             avmu(ji,jj,ikbu-1) = 0.e0 
    364             avmv(ji,jj,ikbv-1) = 0.e0 
    365          END DO 
    366       END DO 
     357              ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
     358              ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
     359              avmu(ji,jj,ikbu+1) = 0.e0 
     360              avmv(ji,jj,ikbv+1) = 0.e0 
     361              ikbu = miku(ji,jj)         ! ocean top level at u- and v-points  
     362              ikbv = mikv(ji,jj)         ! (first wet ocean u- and v-points) 
     363              IF (ikbu > 1) avmu(ji,jj,ikbu) = 0.e0 
     364              IF (ikbv > 1) avmv(ji,jj,ikbv) = 0.e0 
     365           END DO 
     366        END DO 
    367367      ENDIF 
    368368      ! 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r4704 r4812  
    108108      REAL(wp) ::   zcj, zfj, zav, zbv, zaj, zbj   !   -      - 
    109109      REAL(wp) ::   zck, zfk,      zbw             !   -      - 
     110      REAL(wp) ::   zdepv, zdepu         !   -      - 
    110111      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwz, zww 
    111112      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zdzr 
    112113      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zgru, zgrv 
     114      REAL(wp), POINTER, DIMENSION(:,:  ) :: zhmlpu, zhmlpv 
    113115      !!---------------------------------------------------------------------- 
    114116      ! 
     
    116118      ! 
    117119      CALL wrk_alloc( jpi,jpj,jpk, zwz, zww, zdzr, zgru, zgrv ) 
     120      CALL wrk_alloc( jpi,jpj, zhmlpu, zhmlpv ) 
    118121 
    119122      IF ( ln_traldf_iso .OR. ln_dynldf_iso ) THEN  
     
    153156         ! 
    154157         zdzr(:,:,1) = 0._wp        !==   Local vertical density gradient at T-point   == !   (evaluated from N^2) 
    155          DO jk = 2, jpkm1 
     158         DO jk = 1, jpkm1 
    156159            !                                ! zdzr = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 
    157160            !                                !   trick: tmask(ik  )  = 0   =>   all pn2   = 0   =>   zdzr = 0 
     
    162165               &                 * ( pn2(:,:,jk) + pn2(:,:,jk+1) ) * ( 1._wp - 0.5_wp * tmask(:,:,jk+1) ) 
    163166         END DO 
     167         ! surface initialisation  
     168         DO jj = 1, jpjm1 
     169            DO ji = 1, jpim1 
     170              zdzr(ji,jj,1:mikt(ji,jj)) = 0._wp 
     171            END DO 
     172         END DO 
    164173         ! 
    165174         !                          !==   Slopes just below the mixed layer   ==! 
     
    170179         ! ===========================      | vslp = d/dj( prd ) / d/dz( prd ) 
    171180         ! 
     181         DO jj = 2, jpjm1 
     182            DO ji = fs_2, fs_jpim1   ! vector opt. 
     183               IF (miku(ji,jj) .GT. miku(ji+1,jj)) zhmlpu(ji,jj) = hmlpt(ji  ,jj) 
     184               IF (miku(ji,jj) .LT. miku(ji+1,jj)) zhmlpu(ji,jj) = hmlpt(ji+1,jj) 
     185               IF (miku(ji,jj) .EQ. miku(ji+1,jj)) zhmlpu(ji,jj) = MAX(hmlpt(ji  ,jj), hmlpt(ji+1,jj)) 
     186               IF (mikv(ji,jj) .GT. miku(ji,jj+1)) zhmlpv(ji,jj) = hmlpt(ji  ,jj) 
     187               IF (mikv(ji,jj) .LT. miku(ji,jj+1)) zhmlpv(ji,jj) = hmlpt(ji,jj+1) 
     188               IF (mikv(ji,jj) .EQ. miku(ji,jj+1)) zhmlpv(ji,jj) = MAX(hmlpt(ji,jj), hmlpt(ji,jj+1)) 
     189            ENDDO 
     190         ENDDO 
    172191         DO jk = 2, jpkm1                            !* Slopes at u and v points 
    173192            DO jj = 2, jpjm1 
     
    183202                  zbv = MIN(  zbv, -100._wp* ABS( zav ) , -7.e+3_wp/fse3v(ji,jj,jk)* ABS( zav )  ) 
    184203                  !                                      ! uslp and vslp output in zwz and zww, resp. 
    185                   zfi = MAX( omlmask(ji,jj,jk), omlmask(ji+1,jj,jk) ) 
    186                   zfj = MAX( omlmask(ji,jj,jk), omlmask(ji,jj+1,jk) ) 
    187                   zwz(ji,jj,jk) = ( ( 1. - zfi) * zau / ( zbu - zeps )                                              & 
    188                      &                   + zfi  * uslpml(ji,jj)                                                     & 
    189                      &                          * 0.5_wp * ( fsdept(ji+1,jj,jk)+fsdept(ji,jj,jk)-fse3u(ji,jj,1) )   & 
    190                      &                          / MAX( hmlpt(ji,jj), hmlpt(ji+1,jj), 5._wp ) ) * umask(ji,jj,jk) 
    191                   zww(ji,jj,jk) = ( ( 1. - zfj) * zav / ( zbv - zeps )                                              & 
    192                      &                   + zfj  * vslpml(ji,jj)                                                     & 
    193                      &                          * 0.5_wp * ( fsdept(ji,jj+1,jk)+fsdept(ji,jj,jk)-fse3v(ji,jj,1) )   & 
    194                      &                          / MAX( hmlpt(ji,jj), hmlpt(ji,jj+1), 5. ) ) * vmask(ji,jj,jk) 
     204                  zfi = MAX( omlmask(ji,jj,jk), omlmask(ji+1,jj,jk) )  
     205                  zfj = MAX( omlmask(ji,jj,jk), omlmask(ji,jj+1,jk) )  
     206                  ! thickness of water column between surface and level k at u/v point 
     207                  zdepu = 0.5_wp * (( fsdept(ji,jj,jk) + fsdept(ji+1,jj  ,jk) )                   & 
     208                             - 2 * MAX( risfdep(ji,jj), risfdep(ji+1,jj  ) )  & 
     209                             - fse3u(ji,jj,miku(ji,jj))                                         ) 
     210                  zdepv = 0.5_wp * (( fsdept(ji,jj,jk) + fsdept(ji  ,jj+1,jk) )                   & 
     211                             - 2 * MAX( risfdep(ji,jj), risfdep(ji,jj+1) ) & 
     212                             - fse3v(ji,jj,mikv(ji,jj))                                         ) 
     213                  zwz(ji,jj,jk) = ( 1. - zfi) * zau / ( zbu - zeps )                                              & 
     214                     &                 + zfi  * uslpml(ji,jj)                                                     & 
     215                     &                        * zdepu / MAX( zhmlpu(ji,jj), 5._wp ) 
     216                  zwz(ji,jj,jk) = zwz(ji,jj,jk) * umask(ji,jj,jk) * umask(ji,jj,jk-1) 
     217                  zww(ji,jj,jk) = ( 1. - zfj) * zav / ( zbv - zeps )                                              & 
     218                     &                 + zfj  * vslpml(ji,jj)                                                     & 
     219                     &                        * zdepv / MAX( zhmlpv(ji,jj), 5._wp )  
     220                  zww(ji,jj,jk) = zww(ji,jj,jk) * vmask(ji,jj,jk) * vmask(ji,jj,jk-1) 
     221                   
     222                  
    195223!!gm  modif to suppress omlmask.... (as in Griffies case) 
    196224!                  !                                         ! jk must be >= ML level for zf=1. otherwise  zf=0. 
     
    242270                  uslp(ji,jj,jk) = uslp(ji,jj,jk) * ( umask(ji,jj+1,jk) + umask(ji,jj-1,jk  ) ) * 0.5_wp   & 
    243271                     &                            * ( umask(ji,jj  ,jk) + umask(ji,jj  ,jk+1) ) * 0.5_wp   & 
    244                      &                            *   tmask(ji,jj,jk-1) 
     272                     &                            *   umask(ji,jj,jk-1) !* umask(ji,jj,jk) * umask(ji,jj,jk+1) 
    245273                  vslp(ji,jj,jk) = vslp(ji,jj,jk) * ( vmask(ji+1,jj,jk) + vmask(ji-1,jj,jk  ) ) * 0.5_wp   & 
    246274                     &                            * ( vmask(ji  ,jj,jk) + vmask(ji  ,jj,jk+1) ) * 0.5_wp   & 
    247                      &                            *   tmask(ji,jj,jk-1) 
     275                     &                            *   vmask(ji,jj,jk-1) !* vmask(ji,jj,jk) * vmask(ji,jj,jk+1) 
    248276               END DO 
    249277            END DO 
     
    258286               DO ji = fs_2, fs_jpim1   ! vector opt. 
    259287                  !                                  !* Local vertical density gradient evaluated from N^2 
    260                   zbw = zm1_2g * pn2 (ji,jj,jk) * ( prd (ji,jj,jk) + prd (ji,jj,jk-1) + 2. ) 
     288                  zbw = zm1_2g * pn2 (ji,jj,jk) * ( prd (ji,jj,jk) + prd (ji,jj,jk-1) + 2. ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
    261289                  !                                  !* Slopes at w point 
    262290                  !                                        ! i- & j-gradient of density at w-points 
     
    266294                     &      + vmask(ji,jj-1,jk-1) + vmask(ji,jj,jk  ) , zeps  ) *  e2t(ji,jj) 
    267295                  zai =    (  zgru (ji-1,jj,jk  ) + zgru (ji,jj,jk-1)           & 
    268                      &      + zgru (ji-1,jj,jk-1) + zgru (ji,jj,jk  )   ) / zci * tmask (ji,jj,jk) 
     296                     &      + zgru (ji-1,jj,jk-1) + zgru (ji,jj,jk  )   ) / zci 
    269297                  zaj =    (  zgrv (ji,jj-1,jk  ) + zgrv (ji,jj,jk-1)           & 
    270                      &      + zgrv (ji,jj-1,jk-1) + zgrv (ji,jj,jk  )   ) / zcj * tmask (ji,jj,jk) 
     298                     &      + zgrv (ji,jj-1,jk-1) + zgrv (ji,jj,jk  )   ) / zcj 
    271299                  !                                        ! bound the slopes: abs(zw.)<= 1/100 and zb..<0. 
    272300                  !                                        ! + kxz max= ah slope max =< e1 e3 /(pi**2 2 dt) 
     
    274302                  zbj = MIN( zbw , -100._wp* ABS( zaj ) , -7.e+3_wp/fse3w(ji,jj,jk)* ABS( zaj )  ) 
    275303                  !                                        ! wslpi and wslpj with ML flattening (output in zwz and zww, resp.) 
    276                   zfk = MAX( omlmask(ji,jj,jk), omlmask(ji,jj,jk-1) )   ! zfk=1 in the ML otherwise zfk=0 
    277                   zck = fsdepw(ji,jj,jk) / MAX( hmlp(ji,jj), 10._wp ) 
    278                   zwz(ji,jj,jk) = (  zai / ( zbi - zeps ) * ( 1._wp - zfk ) + zck * wslpiml(ji,jj) * zfk  ) * tmask(ji,jj,jk) 
    279                   zww(ji,jj,jk) = (  zaj / ( zbj - zeps ) * ( 1._wp - zfk ) + zck * wslpjml(ji,jj) * zfk  ) * tmask(ji,jj,jk) 
     304                  zfk = MAX( omlmask(ji,jj,jk), omlmask(ji,jj,jk-1) )    ! zfk=1 in the ML otherwise zfk=0 
     305                  zck = ( fsdepw(ji,jj,jk) - fsdepw(ji,jj,mikt(ji,jj) ) ) / MAX( hmlp(ji,jj), 10._wp ) 
     306                  zwz(ji,jj,jk) = (  zai / ( zbi - zeps ) * ( 1._wp - zfk ) + zck * wslpiml(ji,jj) * zfk  ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
     307                  zww(ji,jj,jk) = (  zaj / ( zbj - zeps ) * ( 1._wp - zfk ) + zck * wslpjml(ji,jj) * zfk  ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
    280308 
    281309!!gm  modif to suppress omlmask....  (as in Griffies operator) 
     
    330358                  zck =   ( umask(ji,jj,jk) + umask(ji-1,jj,jk) )   & 
    331359                     &  * ( vmask(ji,jj,jk) + vmask(ji,jj-1,jk) ) * 0.25 
    332                   wslpi(ji,jj,jk) = wslpi(ji,jj,jk) * zck * tmask(ji,jj,jk-1) 
    333                   wslpj(ji,jj,jk) = wslpj(ji,jj,jk) * zck * tmask(ji,jj,jk-1) 
     360                  wslpi(ji,jj,jk) = wslpi(ji,jj,jk) * zck * tmask(ji,jj,jk-1) * tmask(ji,jj,jk) 
     361                  wslpj(ji,jj,jk) = wslpj(ji,jj,jk) * zck * tmask(ji,jj,jk-1) * tmask(ji,jj,jk) 
    334362               END DO 
    335363            END DO 
     
    387415                  uslp(ji,jj,jk) = -1./e1u(ji,jj) * ( fsdept_b(ji+1,jj,jk) - fsdept_b(ji ,jj ,jk) ) * umask(ji,jj,jk)  
    388416                  vslp(ji,jj,jk) = -1./e2v(ji,jj) * ( fsdept_b(ji,jj+1,jk) - fsdept_b(ji ,jj ,jk) ) * vmask(ji,jj,jk)  
    389                   wslpi(ji,jj,jk) = -1./e1t(ji,jj) * ( fsdepw_b(ji+1,jj,jk) - fsdepw_b(ji-1,jj,jk) ) * tmask(ji,jj,jk) * 0.5  
    390                   wslpj(ji,jj,jk) = -1./e2t(ji,jj) * ( fsdepw_b(ji,jj+1,jk) - fsdepw_b(ji,jj-1,jk) ) * tmask(ji,jj,jk) * 0.5  
     417                  wslpi(ji,jj,jk) = -1./e1t(ji,jj) * ( fsdepw_b(ji+1,jj,jk) - fsdepw_b(ji-1,jj,jk) ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) * 0.5  
     418                  wslpj(ji,jj,jk) = -1./e2t(ji,jj) * ( fsdepw_b(ji,jj+1,jk) - fsdepw_b(ji,jj-1,jk) ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) * 0.5  
    391419               END DO  
    392420            END DO  
     
    410438       
    411439      CALL wrk_dealloc( jpi,jpj,jpk, zwz, zww, zdzr, zgru, zgrv ) 
     440      CALL wrk_dealloc( jpi,jpj,     zhmlpu, zhmlpv) 
    412441      ! 
    413442      IF( nn_timing == 1 )  CALL timing_stop('ldf_slp') 
     
    714743# endif 
    715744               ik = nmln(ji,jj) - 1 
    716                IF( jk <= ik ) THEN   ;   omlmask(ji,jj,jk) = 1._wp 
     745               IF( jk <= ik .AND. jk >= mikt(ji,jj) ) THEN   ;   omlmask(ji,jj,jk) = 1._wp 
    717746               ELSE                  ;   omlmask(ji,jj,jk) = 0._wp 
    718747               ENDIF 
     
    742771            ! 
    743772            !                        !- vertical density gradient for u- and v-slopes (from dzr at T-point) 
    744             iku = MIN(  MAX( 1, nmln(ji,jj) , nmln(ji+1,jj) ) , jpkm1  )   ! ML (MAX of T-pts, bound by jpkm1) 
    745             ikv = MIN(  MAX( 1, nmln(ji,jj) , nmln(ji,jj+1) ) , jpkm1  )   ! 
     773            iku = MIN(  MAX( miku(ji,jj)+1, nmln(ji,jj) , nmln(ji+1,jj) ) , jpkm1  )   ! ML (MAX of T-pts, bound by jpkm1) 
     774            ikv = MIN(  MAX( mikv(ji,jj)+1, nmln(ji,jj) , nmln(ji,jj+1) ) , jpkm1  )   ! 
    746775            zbu = 0.5_wp * ( p_dzr(ji,jj,iku) + p_dzr(ji+1,jj  ,iku) ) 
    747776            zbv = 0.5_wp * ( p_dzr(ji,jj,ikv) + p_dzr(ji  ,jj+1,ikv) ) 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90

    r4747 r4812  
    116116      CALL wrk_alloc( jpi, jpj, kjpt, zti, ztj           )  
    117117      ! 
    118       pgru(:,:)=0.0_wp ; pgrv(:,:)=0.0_wp ; pgtu(:,:,:)=0.0_wp ; pgtv(:,:,:)=0.0_wp ; 
     118      pgtu(:,:,:)=0.0_wp ; pgtv(:,:,:)=0.0_wp ; 
    119119      ! 
    120120      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==! 
     
    144144                  ! gradient of  tracers 
    145145                  pgtu(ji,jj,jn) = umask(ji,jj,iku) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    146                   pgzu(ji,jj)    = (fsde3w(ji+1,jj,iku) - ze3wu) - fsde3w(ji,jj,iku) 
    147146               ELSE                           ! case 2 
    148147                  zmaxu = -ze3wu / fse3w(ji,jj,iku) 
     
    151150                  ! gradient of tracers 
    152151                  pgtu(ji,jj,jn) = umask(ji,jj,iku) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
    153                   pgzu(ji,jj)    = fsde3w(ji+1,jj,iku) - (fsde3w(ji,jj,iku) + ze3wu) 
    154152               ENDIF 
    155153               ENDIF 
     
    163161                  ! gradient of tracers 
    164162                  pgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    165                   pgzv(ji,jj)    = (fsde3w(ji,jj+1,ikv) - ze3wv) - fsde3w(ji,jj,ikv)  
    166163               ELSE                           ! case 2 
    167164                  zmaxv =  -ze3wv / fse3w(ji,jj,ikv) 
     
    170167                  ! gradient of tracers 
    171168                  pgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
    172                   pgzv(ji,jj)    = fsde3w(ji,jj+1,ikv) - (fsde3w(ji,jj,ikv) + ze3wv) 
    173169               ENDIF 
    174170               ENDIF 
     
    183179      ! horizontal derivative of density anomalies (rd) 
    184180      IF( PRESENT( prd ) ) THEN         ! depth of the partial step level 
     181         pgru(:,:)=0.0_wp ; pgrv(:,:)=0.0_wp  
    185182# if defined key_vectopt_loop 
    186183         jj = 1 
     
    224221               ze3wv  = (gdept_0(ji,jj+1,ikv) - gdepw_0(ji,jj+1,ikv)) - (gdept_0(ji,jj,ikv) - gdepw_0(ji,jj,ikv)) 
    225222               IF( ze3wu >= 0._wp ) THEN  
     223                  pgzu(ji,jj) = (fsde3w(ji+1,jj,iku) - ze3wu) - fsde3w(ji,jj,iku) 
    226224                  pgru(ji,jj) = umask(ji,jj,iku) * ( zri(ji  ,jj) - prd(ji,jj,iku) )   ! i: 1 
    227225                  pmru(ji,jj) = umask(ji,jj,iku) * ( zri(ji  ,jj) + prd(ji,jj,iku) )   ! i: 1  
     
    230228                                   - fse3w(ji  ,jj,iku)          * ( prd(ji  ,jj,iku) + prd(ji  ,jj,ikum1) + 2._wp) )  ! j: 2 
    231229               ELSE   
     230                  pgzu(ji,jj) = fsde3w(ji+1,jj,iku) - (fsde3w(ji,jj,iku) + ze3wu) 
    232231                  pgru(ji,jj) = umask(ji,jj,iku) * ( prd(ji+1,jj,iku) - zri(ji,jj) )   ! i: 2 
    233232                  pmru(ji,jj) = umask(ji,jj,iku) * ( prd(ji+1,jj,iku) + zri(ji,jj) )   ! i: 2 
     
    237236               ENDIF 
    238237               IF( ze3wv >= 0._wp ) THEN 
     238                  pgzv(ji,jj) = (fsde3w(ji,jj+1,ikv) - ze3wv) - fsde3w(ji,jj,ikv)  
    239239                  pgrv(ji,jj) = vmask(ji,jj,ikv) * ( zrj(ji,jj  ) - prd(ji,jj,ikv) )   ! j: 1 
    240240                  pmrv(ji,jj) = vmask(ji,jj,ikv) * ( zrj(ji,jj  ) + prd(ji,jj,ikv) )   ! j: 1 
     
    243243                                   - fse3w(ji,jj  ,ikv)          * ( prd(ji,jj  ,ikv) + prd(ji,jj  ,ikvm1) + 2._wp) )  ! j: 2 
    244244               ELSE  
     245                  pgzv(ji,jj) = fsde3w(ji,jj+1,ikv) - (fsde3w(ji,jj,ikv) + ze3wv) 
    245246                  pgrv(ji,jj) = vmask(ji,jj,ikv) * ( prd(ji,jj+1,ikv) - zrj(ji,jj) )   ! j: 2 
    246247                  pmrv(ji,jj) = vmask(ji,jj,ikv) * ( prd(ji,jj+1,ikv) + zrj(ji,jj) )   ! j: 2 
     
    284285                  ! gradient of tracers 
    285286                  sgtu(ji,jj,jn) = umask(ji,jj,iku) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    286                   sgzu(ji,jj)    = (fsde3w(ji+1,jj,iku) + ze3wu) - fsde3w(ji,jj,iku) 
    287287               ELSE                           ! case 2 
    288288                  zmaxu = - ze3wu / fse3w(ji,jj,iku+1) 
    289289                  ! interpolated values of tracers 
    290290                  zti(ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,iku+1,jn) - pta(ji,jj,iku,jn) ) 
     291                  ! gradient of  tracers 
    291292                  sgtu(ji,jj,jn) = umask(ji,jj,iku) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
    292                   ! gradient of  tracers 
    293                   sgzu(ji,jj)    = fsde3w(ji+1,jj,iku) - (fsde3w(ji,jj,iku) - ze3wu) 
    294293               ENDIF 
    295294               ! 
     
    301300                  ! gradient of tracers 
    302301                  sgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    303                   sgzv(ji,jj)    = (fsde3w(ji,jj+1,ikv) + ze3wv) - fsde3w(ji,jj,ikv)  
    304302               ELSE                           ! case 2 
    305303                  zmaxv =  - ze3wv / fse3w(ji,jj,ikv+1) 
     
    308306                  ! gradient of tracers 
    309307                  sgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
    310                   sgzv(ji,jj)    = fsde3w(ji,jj+1,ikv) - (fsde3w(ji,jj,ikv) - ze3wv) 
    311308               ENDIF 
    312309# if ! defined key_vectopt_loop 
     
    361358               ze3wv  = (gdepw_0(ji,jj+1,ikv+1) - gdept_0(ji,jj+1,ikv)) - (gdepw_0(ji,jj,ikv+1) - gdept_0(ji,jj,ikv)) 
    362359               IF( ze3wu >= 0._wp ) THEN 
     360                 sgzu  (ji,jj) = (fsde3w(ji+1,jj,iku) + ze3wu) - fsde3w(ji,jj,iku) 
    363361                 sgru  (ji,jj) = umask(ji,jj,iku)   * ( zri(ji,jj) - prd(ji,jj,iku) )          ! i: 1 
    364362                 smru  (ji,jj) = umask(ji,jj,iku)   * ( zri(ji,jj) + prd(ji,jj,iku) )          ! i: 1  
     
    367365                                   - fse3w(ji  ,jj,iku+1)          * (prd(ji,jj,iku) + prd(ji  ,jj,iku+1) + 2._wp)   ) ! i: 1 
    368366               ELSE 
     367                 sgzu  (ji,jj) = fsde3w(ji+1,jj,iku) - (fsde3w(ji,jj,iku) - ze3wu) 
    369368                 sgru  (ji,jj) = umask(ji,jj,iku)   * ( prd(ji+1,jj,iku) - zri(ji,jj) )      ! i: 2 
    370369                 smru  (ji,jj) = umask(ji,jj,iku)   * ( prd(ji+1,jj,iku) + zri(ji,jj) )      ! i: 2 
     
    374373               ENDIF 
    375374               IF( ze3wv >= 0._wp ) THEN 
     375                 sgzv  (ji,jj) = (fsde3w(ji,jj+1,ikv) + ze3wv) - fsde3w(ji,jj,ikv)  
    376376                 sgrv  (ji,jj) = vmask(ji,jj,ikv)   * ( zrj(ji,jj  ) - prd(ji,jj,ikv) )        ! j: 1 
    377377                 smrv  (ji,jj) = vmask(ji,jj,ikv)   * ( zrj(ji,jj  ) + prd(ji,jj,ikv) )        ! j: 1 
     
    381381                                  ! + 2 due to the formulation in density and not in anomalie in hpg sco 
    382382               ELSE 
     383                 sgzv  (ji,jj) = fsde3w(ji,jj+1,ikv) - (fsde3w(ji,jj,ikv) - ze3wv) 
    383384                 sgrv  (ji,jj) = vmask(ji,jj,ikv)   * ( prd(ji,jj+1,ikv) - zrj(ji,jj) )     ! j: 2 
    384385                 smrv  (ji,jj) = vmask(ji,jj,ikv)   * ( prd(ji,jj+1,ikv) + zrj(ji,jj) )     ! j: 2 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r4666 r4812  
    138138               ENDIF 
    139139         ! mask zmsk in order to have avt and avs masked 
    140                zmsks(:,:) = zmsks(:,:) * tmask(:,:,jk) 
     140               zmsks(ji,jj) = zmsks(ji,jj) * tmask(ji,jj,jk) 
    141141 
    142142 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r4245 r4812  
    9999         DO jj = 1, jpj 
    100100            DO ji = 1, jpi 
    101                IF( rhop(ji,jj,jk) > rhop(ji,jj,nla10) + rho_c )   nmln(ji,jj) = jk      ! Mixed layer 
    102                IF( avt (ji,jj,jk) < avt_c                     )   imld(ji,jj) = jk      ! Turbocline  
     101               IF( rhop(ji,jj,jk) > rhop(ji,jj,MAX(mikt(ji,jj),nla10)) + rho_c )   nmln(ji,jj) = MAX(jk,mikt(ji,jj))      ! Mixed layer 
     102               IF( avt (ji,jj,jk) < avt_c                     )   imld(ji,jj) = MAX(mikt(ji,jj),jk)      ! Turbocline  
    103103            END DO 
    104104         END DO 
     
    109109            iiki = imld(ji,jj) 
    110110            iikn = nmln(ji,jj) 
    111             hmld (ji,jj) = fsdepw(ji,jj,iiki  ) * tmask(ji,jj,1)    ! Turbocline depth  
    112             hmlp (ji,jj) = fsdepw(ji,jj,iikn  ) * tmask(ji,jj,1)    ! Mixed layer depth 
    113             hmlpt(ji,jj) = fsdept(ji,jj,iikn-1)                     ! depth of the last T-point inside the mixed layer 
     111            hmld (ji,jj) = ( fsdepw(ji,jj,iiki  ) - fsdepw(ji,jj,mikt(ji,jj) )            ) * ssmask(ji,jj)    ! Turbocline depth  
     112            hmlp (ji,jj) = ( fsdepw(ji,jj,iikn  ) - fsdepw(ji,jj,MAX(mikt(ji,jj),nla10) ) ) * ssmask(ji,jj)    ! Mixed layer depth 
     113            hmlpt(ji,jj) = ( fsdept(ji,jj,iikn-1) - fsdepw(ji,jj,mikt(ji,jj) )            ) * ssmask(ji,jj)    ! depth of the last T-point inside the mixed layer 
    114114         END DO 
    115115      END DO 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/TOP_SRC/TRP/trcldf.F90

    r3294 r4812  
    7373 
    7474      SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend 
    75       CASE ( 0 )   ;   CALL tra_ldf_lap   ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra            )  ! iso-level laplacian 
     75      CASE ( 0 )   ;   CALL tra_ldf_lap   ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra        )  ! iso-level laplacian 
    7676      CASE ( 1 )                                                                                            ! rotated laplacian 
    7777                       IF( ln_traldf_grif ) THEN 
    7878                          CALL tra_ldf_iso_grif( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 
    7979                       ELSE 
    80                           CALL tra_ldf_iso     ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 
     80                          CALL tra_ldf_iso     ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra, rn_ahtb_0 ) 
    8181                       ENDIF 
    82       CASE ( 2 )   ;   CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra            )  ! iso-level bilaplacian 
     82      CASE ( 2 )   ;   CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra            )  ! iso-level bilaplacian 
    8383      CASE ( 3 )   ;   CALL tra_ldf_bilapg( kt, nittrc000, 'TRC',             trb, tra, jptra            )  ! s-coord. horizontal bilaplacian 
    8484         ! 
    8585      CASE ( -1 )                                     ! esopa: test all possibility with control print 
    86          CALL tra_ldf_lap   ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra            ) 
     86         CALL tra_ldf_lap   ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra            ) 
    8787         WRITE(charout, FMT="('ldf0 ')") ;  CALL prt_ctl_trc_info(charout) 
    8888                                            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     
    9090            CALL tra_ldf_iso_grif( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 
    9191         ELSE 
    92             CALL tra_ldf_iso     ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra, rn_ahtb_0 ) 
     92            CALL tra_ldf_iso     ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra, rn_ahtb_0 ) 
    9393         ENDIF 
    9494         WRITE(charout, FMT="('ldf1 ')") ;  CALL prt_ctl_trc_info(charout) 
    9595                                            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    96          CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, trb, tra, jptra            ) 
     96         CALL tra_ldf_bilap ( kt, nittrc000, 'TRC', gtru, gtrv, gtrui, gtrvi, trb, tra, jptra            ) 
    9797         WRITE(charout, FMT="('ldf2 ')") ;  CALL prt_ctl_trc_info(charout) 
    9898                                            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90

    r4148 r4812  
    8282      IF( .NOT. Agrif_Root())   CALL Agrif_Update_Trc( kstp )   ! Update tracer at AGRIF zoom boundaries : children only 
    8383#endif 
    84          IF( ln_zps    )        CALL zps_hde( kstp, jptra, trn, gtru, gtrv )  ! Partial steps: now horizontal gradient of passive 
     84         IF( ln_zps    )        CALL zps_hde( kstp, jptra, trn, pgtu=gtru, pgtv=gtrv, sgtu=gtrui, sgtv=gtrvi )  ! Partial steps: now horizontal gradient of passive 
    8585                                                                ! tracers at the bottom ocean level 
    8686         ! 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r4611 r4812  
    4242   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)           ::  gtru           !: hor. gradient at u-points at bottom ocean level 
    4343   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)           ::  gtrv           !: hor. gradient at v-points at bottom ocean level 
     44   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)           ::  gtrui          !: hor. gradient at u-points at top    ocean level 
     45   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)           ::  gtrvi          !: hor. gradient at v-points at top    ocean level 
    4446    
    4547   !! passive tracers  (input and output) 
     
    183185      ! 
    184186      ALLOCATE( trn(jpi,jpj,jpk,jptra), trb(jpi,jpj,jpk,jptra), tra(jpi,jpj,jpk,jptra),       &   
    185          &      gtru(jpi,jpj,jpk)     , gtrv(jpi,jpj,jpk)                             ,       & 
     187         &      gtru (jpi,jpj,jptra)  , gtrv (jpi,jpj,jptra)                          ,       & 
     188         &      gtrui(jpi,jpj,jptra)  , gtrvi(jpi,jpj,jptra)                          ,       & 
    186189         &      cvol(jpi,jpj,jpk)     , rdttrc(jpk)           , trai(jptra)           ,       & 
    187190         &      ctrcnm(jptra)         , ctrcln(jptra)         , ctrcun(jptra)         ,       &  
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r4607 r4812  
    143143  
    144144      tra(:,:,:,:) = 0._wp 
    145        
    146145      IF( ln_zps .AND. .NOT. lk_c1d )   &              ! Partial steps: before horizontal gradient of passive 
    147         &    CALL zps_hde( nit000, jptra, trn, gtru, gtrv )       ! tracers at the bottom ocean level 
     146        &    CALL zps_hde( nit000, jptra, trn, pgtu=gtru, pgtv=gtrv, sgtu=gtrui, sgtv=gtrvi )       ! tracers at the bottom ocean level 
    148147 
    149148      ! 
Note: See TracChangeset for help on using the changeset viewer.