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/TRD/trdglo.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/TRD/trdglo.F90

    r7931 r8143  
    99 
    1010   !!---------------------------------------------------------------------- 
    11    !!   trd_glo      : domain averaged budget of trends (including kinetic energy and T^2 trends) 
    12    !!   glo_dyn_wri  : print dynamic trends in ocean.output file 
    13    !!   glo_tra_wri  : print global T & T^2 trends in ocean.output file 
    14    !!   trd_glo_init : initialization step 
     11   !!   trd_glo       : domain averaged budget of trends (including kinetic energy and T^2 trends) 
     12   !!   glo_dyn_wri   : print dynamic trends in ocean.output file 
     13   !!   glo_tra_wri   : print global T & T^2 trends in ocean.output file 
     14   !!   trd_glo_init  : initialization step 
    1515   !!---------------------------------------------------------------------- 
    16    USE oce             ! ocean dynamics and tracers variables 
    17    USE dom_oce         ! ocean space and time domain variables 
    18    USE sbc_oce         ! surface boundary condition: ocean 
    19    USE trd_oce         ! trends: ocean variables 
    20    USE phycst          ! physical constants 
    21    USE ldftra          ! lateral diffusion: eddy diffusivity & EIV coeff. 
    22    USE ldfdyn          ! ocean dynamics: lateral physics 
    23    USE zdf_oce         ! ocean vertical physics 
    24    USE zdfbfr          ! bottom friction 
    25    USE zdfddm          ! ocean vertical physics: double diffusion 
    26    USE eosbn2          ! equation of state 
    27    USE phycst          ! physical constants 
     16   USE oce            ! ocean dynamics and tracers variables 
     17   USE dom_oce        ! ocean space and time domain variables 
     18   USE sbc_oce        ! surface boundary condition: ocean 
     19   USE trd_oce        ! trends: ocean variables 
     20   USE phycst         ! physical constants 
     21   USE ldftra         ! lateral diffusion: eddy diffusivity & EIV coeff. 
     22   USE ldfdyn         ! ocean dynamics: lateral physics 
     23   USE zdf_oce        ! ocean vertical physics 
     24   USE zdfdrg         ! ocean vertical physics: bottom friction 
     25   USE zdfddm         ! ocean vertical physics: double diffusion 
     26   USE eosbn2         ! equation of state 
     27   USE phycst         ! physical constants 
    2828   ! 
    29    USE lib_mpp         ! distibuted memory computing library 
    30    USE in_out_manager  ! I/O manager 
    31    USE iom             ! I/O manager library 
    32    USE wrk_nemo        ! Memory allocation 
     29   USE lib_mpp        ! distibuted memory computing library 
     30   USE in_out_manager ! I/O manager 
     31   USE iom            ! I/O manager library 
    3332 
    3433   IMPLICIT NONE 
     
    7776      INTEGER ::   ikbu, ikbv      ! local integers 
    7877      REAL(wp)::   zvm, zvt, zvs, z1_2rau0   ! local scalars 
    79       REAL(wp), POINTER, DIMENSION(:,:)  :: ztswu, ztswv, z2dx, z2dy   ! 2D workspace  
    80       !!---------------------------------------------------------------------- 
    81  
    82       CALL wrk_alloc( jpi, jpj, ztswu, ztswv, z2dx, z2dy ) 
    83  
     78      REAL(wp), DIMENSION(jpi,jpj)  :: ztswu, ztswv, z2dx, z2dy   ! 2D workspace  
     79      !!---------------------------------------------------------------------- 
     80      ! 
    8481      IF( MOD(kt,nn_trd) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN 
    8582         ! 
     
    123120               DO jj = 1, jpjm1 
    124121                  DO ji = 1, jpim1 
    125                      zvt = ptrdx(ji,jj,jk) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
    126                         &                  * e1u    (ji  ,jj  ) * e2u    (ji,jj) * e3u_n(ji,jj,jk) 
    127                      zvs = ptrdy(ji,jj,jk) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
    128                         &                  * e1v    (ji  ,jj  ) * e2v    (ji,jj) * e3u_n(ji,jj,jk) 
     122                     zvt = ptrdx(ji,jj,jk) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
     123                        &                                     * e1e2u  (ji,jj) * e3u_n(ji,jj,jk) 
     124                     zvs = ptrdy(ji,jj,jk) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
     125                        &                                     * e1e2v  (ji,jj) * e3u_n(ji,jj,jk) 
    129126                     umo(ktrd) = umo(ktrd) + zvt 
    130127                     vmo(ktrd) = vmo(ktrd) + zvs 
     
    138135               DO jj = 1, jpjm1 
    139136                  DO ji = 1, jpim1 
    140                      zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
    141                         &                       * z1_2rau0 * e1u    (ji  ,jj  ) * e2u    (ji,jj) 
    142                      zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
    143                         &                       * z1_2rau0 * e1v    (ji  ,jj  ) * e2v    (ji,jj) * e3u_n(ji,jj,jk) 
     137                     zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
     138                        &                                                     * z1_2rau0       * e1e2u(ji,jj) 
     139                     zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
     140                        &                                                     * z1_2rau0       * e1e2v(ji,jj) 
    144141                     umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 
    145142                     vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs 
     
    151148            IF( ktrd == jpdyn_atf ) THEN     ! last trend (asselin time filter) 
    152149               ! 
    153                IF( ln_bfrimp ) THEN                   ! implicit bfr case: compute separately the bottom friction  
     150               IF( ln_drgimp ) THEN                   ! implicit drag case: compute separately the bottom friction  
    154151                  z1_2rau0 = 0.5_wp / rau0 
    155152                  DO jj = 1, jpjm1 
     
    157154                        ikbu = mbku(ji,jj)                  ! deepest ocean u- & v-levels 
    158155                        ikbv = mbkv(ji,jj) 
    159                         zvt = bfrua(ji,jj) * un(ji,jj,ikbu) * e1u(ji,jj) * e2v(ji,jj) 
    160                         zvs = bfrva(ji,jj) * vn(ji,jj,ikbv) * e1v(ji,jj) * e2v(ji,jj) 
     156                        zvt = 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * un(ji,jj,ikbu) * e1e2u(ji,jj) 
     157                        zvs = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vn(ji,jj,ikbv) * e1e2v(ji,jj) 
    161158                        umo(jpdyn_bfri) = umo(jpdyn_bfri) + zvt 
    162159                        vmo(jpdyn_bfri) = vmo(jpdyn_bfri) + zvs 
     
    165162                  END DO 
    166163               ENDIF 
     164!!gm top drag case is missing  
    167165               !  
    168166               CALL glo_dyn_wri( kt )                 ! print the results in ocean.output 
     
    178176      ENDIF 
    179177      ! 
    180       CALL wrk_dealloc( jpi, jpj, ztswu, ztswv, z2dx, z2dy ) 
    181       ! 
    182178   END SUBROUTINE trd_glo 
    183179 
     
    193189      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    194190      REAL(wp) ::   zcof         ! local scalar 
    195       REAL(wp), POINTER, DIMENSION(:,:,:)  ::  zkx, zky, zkz, zkepe   
    196       !!---------------------------------------------------------------------- 
    197  
    198       CALL wrk_alloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 
     191      REAL(wp), DIMENSION(jpi,jpj,jpk)  ::  zkx, zky, zkz, zkepe   
     192      !!---------------------------------------------------------------------- 
    199193 
    200194      ! I. Momentum trends 
     
    283277            &      + vmo(jpdyn_bfr) + vmo(jpdyn_atf) ) / tvolv 
    284278            WRITE (numout,9513) umo(jpdyn_tau) / tvolu, vmo(jpdyn_tau) / tvolv 
    285             IF( ln_bfrimp )   WRITE (numout,9514) umo(jpdyn_bfri) / tvolu, vmo(jpdyn_bfri) / tvolv 
     279            IF( ln_drgimp )   WRITE (numout,9514) umo(jpdyn_bfri) / tvolu, vmo(jpdyn_bfri) / tvolv 
    286280         ENDIF 
    287281 
     
    322316            &      + hke(jpdyn_bfr) + hke(jpdyn_atf) ) / tvolt 
    323317            WRITE (numout,9533) hke(jpdyn_tau) / tvolt 
    324             IF( ln_bfrimp )   WRITE (numout,9534) hke(jpdyn_bfri) / tvolt 
     318            IF( ln_drgimp )   WRITE (numout,9534) hke(jpdyn_bfri) / tvolt 
    325319         ENDIF 
    326320 
     
    372366      ENDIF 
    373367      ! 
    374       CALL wrk_dealloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe ) 
    375       ! 
    376368   END SUBROUTINE glo_dyn_wri 
    377369 
Note: See TracChangeset for help on using the changeset viewer.