Changeset 3845 for trunk/NEMOGCM


Ignore:
Timestamp:
2013-03-22T13:23:14+01:00 (9 years ago)
Author:
agn
Message:

Corrected bug in calculation of zt{i,j}_mlb in ldfslp.F90 when ML reaches bottom

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r3625 r3845  
    2121   !!   ldf_slp_init  : initialization of the slopes computation 
    2222   !!---------------------------------------------------------------------- 
    23    USE oce            ! ocean dynamics and tracers 
    24    USE dom_oce        ! ocean space and time domain 
    25    USE ldftra_oce     ! lateral diffusion: traceur 
    26    USE ldfdyn_oce     ! lateral diffusion: dynamics 
    27    USE phycst         ! physical constants 
    28    USE zdfmxl         ! mixed layer depth 
    29    USE eosbn2         ! equation of states 
    30    USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
    31    USE in_out_manager ! I/O manager 
    32    USE prtctl         ! Print control 
    33    USE wrk_nemo       ! work arrays 
    34    USE timing         ! Timing 
    35    USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
     23   USE oce             ! ocean dynamics and tracers 
     24   USE dom_oce         ! ocean space and time domain 
     25   USE ldftra_oce      ! lateral diffusion: traceur 
     26   USE ldfdyn_oce      ! lateral diffusion: dynamics 
     27   USE phycst          ! physical constants 
     28   USE zdfmxl          ! mixed layer depth 
     29   USE eosbn2          ! equation of states 
     30   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
     31   USE in_out_manager  ! I/O manager 
     32   USE prtctl          ! Print control 
     33   USE wrk_nemo        ! work arrays 
     34   USE timing          ! Timing 
     35   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
    3636 
    3737   IMPLICIT NONE 
     
    495495               DO ji = 1, fs_jpim1 
    496496                  ip = jl   ;   jp = jl 
    497                   jk = MIN( nmln(ji+ip,jj) , mbkt(ji+ip,jj) ) + 1         ! ML level+1 (MIN in case ML depth is the ocean depth) 
    498                   ! Add s-coordinate slope at t-points (do this by *subtracting* gradient of depth) 
    499                   zti_g_raw = (  zdxrho(ji+ip,jj,jk-kp,1-ip) / zdzrho(ji+ip,jj,jk-kp,kp)      & 
    500                      &      - ( fsdept(ji+1,jj,jk-kp) - fsdept(ji,jj,jk-kp) ) / e1u(ji,jj)  ) * umask(ji,jj,jk) 
    501                   jk = MIN( nmln(ji,jj+jp) , mbkt(ji,jj+jp) ) + 1 
    502                   ztj_g_raw = (  zdyrho(ji,jj+jp,jk-kp,1-jp) / zdzrho(ji,jj+jp,jk-kp,kp)      & 
    503                      &      - ( fsdept(ji,jj+1,jk-kp) - fsdept(ji,jj,jk-kp) ) / e2v(ji,jj)  ) * vmask(ji,jj,jk) 
    504                   zti_mlb(ji+ip,jj   ,1-ip,kp) = SIGN( MIN( rn_slpmax, ABS( zti_g_raw ) ), zti_g_raw ) 
    505                   ztj_mlb(ji   ,jj+jp,1-jp,kp) = SIGN( MIN( rn_slpmax, ABS( ztj_g_raw ) ), ztj_g_raw ) 
     497                  ! 
     498                  jk = nmln(ji+ip,jj) + 1 
     499                  IF( jk .GT. mbkt(ji+ip,jj) ) THEN  !ML reaches bottom 
     500                    zti_mlb(ji+ip,jj   ,1-ip,kp) = 0.0_wp 
     501                  ELSE 
     502                    ! Add s-coordinate slope at t-points (do this by *subtracting* gradient of depth) 
     503                    zti_g_raw = (  zdxrho(ji+ip,jj,jk-kp,1-ip) / zdzrho(ji+ip,jj,jk-kp,kp)      & 
     504                       &      - ( fsdept(ji+1,jj,jk-kp) - fsdept(ji,jj,jk-kp) ) / e1u(ji,jj)  ) * umask(ji,jj,jk) 
     505                    zti_mlb(ji+ip,jj   ,1-ip,kp) = SIGN( MIN( rn_slpmax, ABS( zti_g_raw ) ), zti_g_raw ) 
     506                  ENDIF 
     507                  ! 
     508                  jk = nmln(ji,jj+jp) + 1 
     509                  IF( jk .GT. mbkt(ji,jj+jp) ) THEN  !ML reaches bottom 
     510                    ztj_mlb(ji   ,jj+jp,1-jp,kp) = 0.0_wp 
     511                  ELSE 
     512                    ztj_g_raw = (  zdyrho(ji,jj+jp,jk-kp,1-jp) / zdzrho(ji,jj+jp,jk-kp,kp)      & 
     513                       &      - ( fsdept(ji,jj+1,jk-kp) - fsdept(ji,jj,jk-kp) ) / e2v(ji,jj)  ) * vmask(ji,jj,jk) 
     514                    ztj_mlb(ji   ,jj+jp,1-jp,kp) = SIGN( MIN( rn_slpmax, ABS( ztj_g_raw ) ), ztj_g_raw ) 
     515                  ENDIF 
    506516               END DO 
    507517            END DO 
Note: See TracChangeset for help on using the changeset viewer.