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 8093 for branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 – NEMO

Ignore:
Timestamp:
2017-05-30T10:13:14+02:00 (7 years ago)
Author:
gm
Message:

#1880 (HPC-09) - step-6: prepare some forthcoming evolutions (ZDF modules mainly)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r7953 r8093  
    2929   USE dynadv, ONLY: ln_dynadv_vec 
    3030   USE zdf_oce         ! ocean vertical physics 
     31   USE zdfdrg          ! ocean vertical physics: top/bottom friction 
    3132   USE ldftra          ! lateral physics: eddy diffusivity coef. 
    3233   USE ldfdyn          ! lateral physics: eddy viscosity   coef. 
     
    119120      !! ** Method  :  use iom_put 
    120121      !!---------------------------------------------------------------------- 
    121       !! 
    122122      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    123123      !! 
    124       INTEGER                      ::   ji, jj, jk              ! dummy loop indices 
    125       INTEGER                      ::   jkbot                   ! 
    126       REAL(wp)                     ::   zztmp, zztmpx, zztmpy   !  
    127       !! 
    128       REAL(wp), POINTER, DIMENSION(:,:)   :: z2d      ! 2D workspace 
    129       REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d      ! 3D workspace 
     124      INTEGER ::   ji, jj, jk       ! dummy loop indices 
     125      INTEGER ::   ikbot            ! local integer 
     126      REAL(wp)::   zztmp , zztmpx   ! local scalar 
     127      REAL(wp)::   zztmp2, zztmpy   !   -      - 
     128      REAL(wp), DIMENSION(jpi,jpj)     ::   z2d   ! 2D workspace 
     129      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z3d   ! 3D workspace 
    130130      !!---------------------------------------------------------------------- 
    131131      !  
    132132      IF( nn_timing == 1 )   CALL timing_start('dia_wri') 
    133133      !  
    134       CALL wrk_alloc( jpi , jpj      , z2d ) 
    135       CALL wrk_alloc( jpi , jpj, jpk , z3d ) 
    136       ! 
    137134      ! Output the initial state and forcings 
    138135      IF( ninist == 1 ) THEN                        
     
    162159         DO jj = 1, jpj 
    163160            DO ji = 1, jpi 
    164                jkbot = mbkt(ji,jj) 
    165                z2d(ji,jj) = tsn(ji,jj,jkbot,jp_tem) 
     161               ikbot = mbkt(ji,jj) 
     162               z2d(ji,jj) = tsn(ji,jj,ikbot,jp_tem) 
    166163            END DO 
    167164         END DO 
     
    174171         DO jj = 1, jpj 
    175172            DO ji = 1, jpi 
    176                jkbot = mbkt(ji,jj) 
    177                z2d(ji,jj) = tsn(ji,jj,jkbot,jp_sal) 
     173               ikbot = mbkt(ji,jj) 
     174               z2d(ji,jj) = tsn(ji,jj,ikbot,jp_sal) 
    178175            END DO 
    179176         END DO 
     
    182179 
    183180      IF ( iom_use("taubot") ) THEN                ! bottom stress 
     181         zztmp = rau0 * 0.25 
    184182         z2d(:,:) = 0._wp 
    185183         DO jj = 2, jpjm1 
    186184            DO ji = fs_2, fs_jpim1   ! vector opt. 
     185!!gm old 
     186!!gm BUG  missing x 0.5 
    187187               zztmpx = (  bfrua(ji  ,jj) * un(ji  ,jj,mbku(ji  ,jj))  & 
    188188                      &  + bfrua(ji-1,jj) * un(ji-1,jj,mbku(ji-1,jj))  )       
     
    190190                      &  + bfrva(ji,jj-1) * vn(ji,jj-1,mbkv(ji,jj-1))  )  
    191191               z2d(ji,jj) = rau0 * SQRT( zztmpx * zztmpx + zztmpy * zztmpy ) * tmask(ji,jj,1)  
     192!!gm 
     193               zztmp2 = (  ( rCdU_bot(ji+1,jj)+rCdU_bot(ji  ,jj) ) * un(ji  ,jj,mbku(ji  ,jj))  )**2   & 
     194                  &   + (  ( rCdU_bot(ji  ,jj)+rCdU_bot(ji-1,jj) ) * un(ji-1,jj,mbku(ji-1,jj))  )**2   & 
     195                  &   + (  ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj  ) ) * vn(ji,jj  ,mbkv(ji,jj  ))  )**2   & 
     196                  &   + (  ( rCdU_bot(ji,jj  )+rCdU_bot(ji,jj-1) ) * vn(ji,jj-1,mbkv(ji,jj-1))  )**2 
     197               z2d(ji,jj) = zztmp * SQRT( zztmp2 ) * tmask(ji,jj,1)  
     198!!gm new end 
    192199               ! 
    193200            ENDDO 
     
    202209         DO jj = 1, jpj 
    203210            DO ji = 1, jpi 
    204                jkbot = mbku(ji,jj) 
    205                z2d(ji,jj) = un(ji,jj,jkbot) 
     211               ikbot = mbku(ji,jj) 
     212               z2d(ji,jj) = un(ji,jj,ikbot) 
    206213            END DO 
    207214         END DO 
     
    214221         DO jj = 1, jpj 
    215222            DO ji = 1, jpi 
    216                jkbot = mbkv(ji,jj) 
    217                z2d(ji,jj) = vn(ji,jj,jkbot) 
     223               ikbot = mbkv(ji,jj) 
     224               z2d(ji,jj) = vn(ji,jj,ikbot) 
    218225            END DO 
    219226         END DO 
     
    281288      ! 
    282289      IF ( iom_use("eken") ) THEN 
    283          rke(:,:,jk) = 0._wp                               !      kinetic energy  
     290         z3d(:,:,jk) = 0._wp                               !      kinetic energy  
    284291         DO jk = 1, jpkm1 
    285292            DO jj = 2, jpjm1 
    286293               DO ji = fs_2, fs_jpim1   ! vector opt. 
    287                   zztmp   = 1._wp / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) 
    288                   zztmpx  = 0.5 * (  un(ji-1,jj,jk) * un(ji-1,jj,jk) * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk)    & 
    289                      &             + un(ji  ,jj,jk) * un(ji  ,jj,jk) * e2u(ji  ,jj) * e3u_n(ji  ,jj,jk) )  & 
    290                      &          *  zztmp  
    291                   ! 
    292                   zztmpy  = 0.5 * (  vn(ji,jj-1,jk) * vn(ji,jj-1,jk) * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk)    & 
    293                      &             + vn(ji,jj  ,jk) * vn(ji,jj  ,jk) * e1v(ji,jj  ) * e3v_n(ji,jj  ,jk) )  & 
    294                      &          *  zztmp  
    295                   ! 
    296                   rke(ji,jj,jk) = 0.5_wp * ( zztmpx + zztmpy ) 
    297                   ! 
    298                ENDDO 
    299             ENDDO 
    300          ENDDO 
    301          CALL lbc_lnk( rke, 'T', 1. ) 
    302          CALL iom_put( "eken", rke )            
     294                  zztmp  = r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) 
     295                  z3d(ji,jj,jk) = 0.25_wp * zztmp * (                                    & 
     296                     &            un(ji-1,jj,jk)**2 * e2u(ji-1,jj) * e3u_n(ji-1,jj,jk)   & 
     297                     &          + un(ji  ,jj,jk)**2 * e2u(ji  ,jj) * e3u_n(ji  ,jj,jk)   & 
     298                     &          + vn(ji,jj-1,jk)**2 * e1v(ji,jj-1) * e3v_n(ji,jj-1,jk)   & 
     299                     &          + vn(ji,jj  ,jk)**2 * e1v(ji,jj  ) * e3v_n(ji,jj  ,jk)   ) 
     300               END DO 
     301            END DO 
     302         END DO 
     303         CALL lbc_lnk( z3d, 'T', 1. ) 
     304         CALL iom_put( "eken", z3d )            
    303305      ENDIF 
    304306      ! 
     
    407409      CALL iom_put( "bn2", rn2 )  !Brunt-Vaisala buoyancy frequency (N^2) 
    408410      ! 
    409       CALL wrk_dealloc( jpi , jpj      , z2d ) 
    410       CALL wrk_dealloc( jpi , jpj, jpk , z3d ) 
    411       ! 
    412       ! If we want tmb values  
    413  
    414       IF (ln_diatmb) THEN 
     411 
     412      IF (ln_diatmb) THEN      ! If we want tmb values  
    415413         CALL dia_tmb  
    416414      ENDIF  
Note: See TracChangeset for help on using the changeset viewer.