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 8143 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90 – NEMO

Ignore:
Timestamp:
2017-06-06T15:55:44+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09) - step-7: top/bottom drag computed at T-points, zdfbfr.F90 replaced by zdfdrg.F90 + changes in namelist

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf_imp.F90

    r8093 r8143  
    99   !!            3.3  !  2010-04  (M. Leclair, G. Madec)  Forcing averaged over 2 time steps 
    1010   !!            3.4  !  2012-01  (H. Liu) Semi-implicit bottom friction 
     11   !!            4.0  !  2017-05  (G. Madec)  drag coef. defined at t-point (zdfdrg.F90) 
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    2223   USE dynadv   , ONLY: ln_dynadv_vec ! Momentum advection form 
    2324   USE zdf_oce        ! ocean vertical physics 
    24 !!gm new 
    2525   USE zdfdrg         ! vertical physics: top/bottom drag coef. 
    26 !!gm old 
    27    USE zdfbfr         ! Bottom friction setup 
    28 !!gm 
    2926   ! 
    3027   USE in_out_manager ! I/O manager 
    3128   USE lib_mpp        ! MPP library 
    32    USE wrk_nemo       ! Memory Allocation 
    3329   USE timing         ! Timing 
    3430 
     
    6561      !!      with the following surface/top/bottom boundary condition: 
    6662      !!      surface: wind stress input (averaged over kt-1/2 & kt+1/2) 
    67       !!      top & bottom : top stress (iceshelf-ocean) & bottom stress (cf zdfbfr.F) 
     63      !!      top & bottom : top stress (iceshelf-ocean) & bottom stress (cf zdfdrg.F90) 
    6864      !! 
    6965      !! ** Action :   (ua,va) after velocity  
     
    7672      REAL(wp) ::   zzwi, ze3ua   ! local scalars 
    7773      REAL(wp) ::   zzws, ze3va   !   -      - 
    78       REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwi, zwd, zws 
     74      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zwi, zwd, zws 
    7975      !!---------------------------------------------------------------------- 
    8076      ! 
    8177      IF( nn_timing == 1 )  CALL timing_start('dyn_zdf_imp') 
    82       ! 
    83       CALL wrk_alloc( jpi,jpj,jpk, zwi, zwd, zws )  
    8478      ! 
    8579      IF( kt == nit000 ) THEN 
     
    115109      ! column vector of the tri-diagonal matrix equation 
    116110      ! 
    117       IF( ln_bfrimp ) THEN 
     111      IF( ln_drgimp ) THEN 
    118112         DO jj = 2, jpjm1 
    119113            DO ji = 2, jpim1 
    120114               ikbu = mbku(ji,jj)       ! ocean bottom level at u- and v-points  
    121115               ikbv = mbkv(ji,jj)       ! (deepest ocean u- and v-points) 
    122 !!gm old 
    123                avmu(ji,jj,ikbu+1) = -bfrua(ji,jj) * e3uw_n(ji,jj,ikbu+1) 
    124                avmv(ji,jj,ikbv+1) = -bfrva(ji,jj) * e3vw_n(ji,jj,ikbv+1) 
    125 !!gm new 
    126 !               avmu(ji,jj,ikbu+1) = -0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * e3uw_n(ji,jj,ikbu+1) 
    127 !               avmv(ji,jj,ikbv+1) = -0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * e3vw_n(ji,jj,ikbv+1) 
    128 !!gm 
     116               avmu(ji,jj,ikbu+1) = -0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * e3uw_n(ji,jj,ikbu+1) 
     117               avmv(ji,jj,ikbv+1) = -0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * e3vw_n(ji,jj,ikbv+1) 
    129118            END DO 
    130119         END DO 
     
    134123                  ikbu = miku(ji,jj)       ! ocean top level at u- and v-points  
    135124                  ikbv = mikv(ji,jj)       ! (first wet ocean u- and v-points) 
    136 !!gm old 
    137                   IF( ikbu >= 2 )   avmu(ji,jj,ikbu) = -tfrua(ji,jj) * e3uw_n(ji,jj,ikbu) 
    138                   IF( ikbv >= 2 )   avmv(ji,jj,ikbv) = -tfrva(ji,jj) * e3vw_n(ji,jj,ikbv) 
    139 !!gm new 
    140125                  ! top Cd is masked (=0 outside cavities) no need of test on mik>=2 
    141 !                  avmu(ji,jj,ikbu) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3uw_n(ji,jj,ikbu) 
    142 !                  avmv(ji,jj,ikbv) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3vw_n(ji,jj,ikbv) 
    143 !!gm 
     126                  avmu(ji,jj,ikbu) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3uw_n(ji,jj,ikbu) 
     127                  avmv(ji,jj,ikbv) = -0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * e3vw_n(ji,jj,ikbv) 
    144128               END DO 
    145129            END DO 
     
    152136      !            not lead to the effective stress seen over the whole barotropic loop.  
    153137      ! G. Madec : in linear free surface, e3u_a = e3u_n = e3u_0, so systematic use of e3u_a 
    154       IF( ln_bfrimp .AND. ln_dynspg_ts ) THEN 
     138      IF( ln_drgimp .AND. ln_dynspg_ts ) THEN 
    155139         DO jk = 1, jpkm1        ! remove barotropic velocities 
    156140            ua(:,:,jk) = ( ua(:,:,jk) - ua_b(:,:) ) * umask(:,:,jk) 
     
    163147               ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,ikbu) + r_vvl * e3u_a(ji,jj,ikbu) 
    164148               ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikbv) + r_vvl * e3v_a(ji,jj,ikbv) 
    165 !!gm old 
    166                ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * bfrua(ji,jj) * ua_b(ji,jj) / ze3ua 
    167                va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * bfrva(ji,jj) * va_b(ji,jj) / ze3va 
    168 !!gm new 
    169 !               ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * ua_b(ji,jj) / ze3ua 
    170 !               va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * va_b(ji,jj) / ze3va 
    171 !!gm 
     149               ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * ua_b(ji,jj) / ze3ua 
     150               va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * va_b(ji,jj) / ze3va 
    172151            END DO 
    173152         END DO 
     
    179158                  ze3ua =  ( 1._wp - r_vvl ) * e3u_n(ji,jj,ikbu) + r_vvl * e3u_a(ji,jj,ikbu) 
    180159                  ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikbv) + r_vvl * e3v_a(ji,jj,ikbv) 
    181 !!gm old 
    182                   ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * tfrua(ji,jj) * ua_b(ji,jj) / ze3ua 
    183                   va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * tfrva(ji,jj) * va_b(ji,jj) / ze3va 
    184 !!gm new 
    185160                  ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + p2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * ua_b(ji,jj) / ze3ua 
    186161                  va(ji,jj,ikbv) = va(ji,jj,ikbv) + p2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va 
    187 !!gm 
    188162               END DO 
    189163            END DO 
     
    342316         END DO 
    343317      END DO 
    344        
    345       ! J. Chanut: Lines below are useless ? 
    346       !! restore bottom layer avmu(v)  
    347       !!gm  I almost sure it is !!!! 
    348       IF( ln_bfrimp ) THEN 
    349         DO jj = 2, jpjm1 
    350            DO ji = 2, jpim1 
    351               ikbu = mbku(ji,jj)         ! ocean bottom level at u- and v-points  
    352               ikbv = mbkv(ji,jj)         ! (deepest ocean u- and v-points) 
    353               avmu(ji,jj,ikbu+1) = 0._wp 
    354               avmv(ji,jj,ikbv+1) = 0._wp 
    355            END DO 
    356         END DO 
    357         IF (ln_isfcav) THEN 
    358            DO jj = 2, jpjm1 
    359               DO ji = 2, jpim1 
    360                  ikbu = miku(ji,jj)         ! ocean top level at u- and v-points  
    361                  ikbv = mikv(ji,jj)         ! (first wet ocean u- and v-points) 
    362                  IF( ikbu > 1 )   avmu(ji,jj,ikbu) = 0._wp 
    363                  IF( ikbv > 1 )   avmv(ji,jj,ikbv) = 0._wp 
    364               END DO 
    365            END DO 
    366         ENDIF 
    367       ENDIF 
    368       ! 
    369       CALL wrk_dealloc( jpi,jpj,jpk,   zwi, zwd, zws)  
    370318      ! 
    371319      IF( nn_timing == 1 )   CALL timing_stop('dyn_zdf_imp') 
Note: See TracChangeset for help on using the changeset viewer.