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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trddyn.F90

    r10425 r13463  
    3636 
    3737   !! * Substitutions 
    38 #  include "vectopt_loop_substitute.h90" 
     38#  include "do_loop_substitute.h90" 
     39#  include "domzgr_substitute.h90" 
    3940   !!---------------------------------------------------------------------- 
    4041   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    4445CONTAINS 
    4546 
    46    SUBROUTINE trd_dyn( putrd, pvtrd, ktrd, kt ) 
     47   SUBROUTINE trd_dyn( putrd, pvtrd, ktrd, kt, Kmm ) 
    4748      !!--------------------------------------------------------------------- 
    4849      !!                  ***  ROUTINE trd_mod  *** 
     
    5556      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    5657      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     58      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    5759      !!---------------------------------------------------------------------- 
    5860      ! 
     
    6668      !   3D output of momentum and/or tracers trends using IOM interface 
    6769      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    68       IF( ln_dyn_trd )   CALL trd_dyn_iom( putrd, pvtrd, ktrd, kt ) 
     70      IF( ln_dyn_trd )   CALL trd_dyn_iom( putrd, pvtrd, ktrd, kt, Kmm ) 
    6971          
    7072      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    7173      !  Integral Constraints Properties for momentum and/or tracers trends 
    7274      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    73       IF( ln_glo_trd )   CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt ) 
     75      IF( ln_glo_trd )   CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt, Kmm ) 
    7476 
    7577      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    7678      !  Kinetic Energy trends 
    7779      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    78       IF( ln_KE_trd  )   CALL trd_ken( putrd, pvtrd, ktrd, kt ) 
     80      IF( ln_KE_trd  )   CALL trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 
    7981 
    8082      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    8183      !  Vorticity trends 
    8284      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    83       IF( ln_vor_trd )   CALL trd_vor( putrd, pvtrd, ktrd, kt ) 
     85      IF( ln_vor_trd )   CALL trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 
    8486 
    8587      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     
    9193 
    9294 
    93    SUBROUTINE trd_dyn_iom( putrd, pvtrd, ktrd, kt ) 
     95   SUBROUTINE trd_dyn_iom( putrd, pvtrd, ktrd, kt, Kmm ) 
    9496      !!--------------------------------------------------------------------- 
    9597      !!                  ***  ROUTINE trd_dyn_iom  *** 
     
    100102      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    101103      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     104      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    102105      ! 
    103106      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     
    121124                              z3dx(:,:,:) = 0._wp                  ! U.dxU & V.dyV (approximation) 
    122125                              z3dy(:,:,:) = 0._wp 
    123                               DO jk = 1, jpkm1   ! no mask as un,vn are masked 
    124                                  DO jj = 2, jpjm1 
    125                                     DO ji = 2, jpim1 
    126                                        z3dx(ji,jj,jk) = un(ji,jj,jk) * ( un(ji+1,jj,jk) - un(ji-1,jj,jk) ) / ( 2._wp * e1u(ji,jj) ) 
    127                                        z3dy(ji,jj,jk) = vn(ji,jj,jk) * ( vn(ji,jj+1,jk) - vn(ji,jj-1,jk) ) / ( 2._wp * e2v(ji,jj) ) 
    128                                     END DO 
    129                                  END DO 
    130                               END DO 
    131                               CALL lbc_lnk_multi( 'trddyn', z3dx, 'U', -1., z3dy, 'V', -1. ) 
     126                              DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     127                                 z3dx(ji,jj,jk) = uu(ji,jj,jk,Kmm) * ( uu(ji+1,jj,jk,Kmm) - uu(ji-1,jj,jk,Kmm) ) / ( 2._wp * e1u(ji,jj) ) 
     128                                 z3dy(ji,jj,jk) = vv(ji,jj,jk,Kmm) * ( vv(ji,jj+1,jk,Kmm) - vv(ji,jj-1,jk,Kmm) ) / ( 2._wp * e2v(ji,jj) ) 
     129                              END_3D 
     130                              CALL lbc_lnk_multi( 'trddyn', z3dx, 'U', -1.0_wp, z3dy, 'V', -1.0_wp ) 
    132131                              CALL iom_put( "utrd_udx", z3dx  ) 
    133132                              CALL iom_put( "vtrd_vdy", z3dy  ) 
     
    142141                              !                                    ! wind stress trends 
    143142                              ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 
    144                               z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u_n(:,:,1) * rau0 ) 
    145                               z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v_n(:,:,1) * rau0 ) 
     143                              z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rho0 ) 
     144                              z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rho0 ) 
    146145                              CALL iom_put( "utrd_tau", z2dx ) 
    147146                              CALL iom_put( "vtrd_tau", z2dy ) 
     
    159158!                                          ikbv = mbkv(ji,jj) 
    160159!                                          z3dx(ji,jj,jk) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) ) &  
    161 !                                               &         * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu) 
     160!                                               &         * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 
    162161!                                          z3dy(ji,jj,jk) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) ) & 
    163 !                                               &         * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv) 
     162!                                               &         * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 
    164163!                                    END DO 
    165164!                                 END DO 
    166165!                              END DO 
    167 !                              CALL lbc_lnk_multi( 'trddyn', z3dx, 'U', -1., z3dy, 'V', -1. ) 
     166!                              CALL lbc_lnk_multi( 'trddyn', z3dx, 'U', -1.0_wp, z3dy, 'V', -1.0_wp ) 
    168167!                              CALL iom_put( "utrd_bfr", z3dx ) 
    169168!                              CALL iom_put( "vtrd_bfr", z3dy ) 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdglo.F90

    r10425 r13463  
    5151 
    5252   !! * Substitutions 
    53 #  include "vectopt_loop_substitute.h90" 
     53#  include "do_loop_substitute.h90" 
     54#  include "domzgr_substitute.h90" 
    5455   !!---------------------------------------------------------------------- 
    5556   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    5960CONTAINS 
    6061 
    61    SUBROUTINE trd_glo( ptrdx, ptrdy, ktrd, ctype, kt ) 
     62   SUBROUTINE trd_glo( ptrdx, ptrdy, ktrd, ctype, kt, Kmm ) 
    6263      !!--------------------------------------------------------------------- 
    6364      !!                  ***  ROUTINE trd_glo  *** 
     
    7273      CHARACTER(len=3)          , INTENT(in   ) ::   ctype   ! momentum or tracers trends type (='DYN'/'TRA') 
    7374      INTEGER                   , INTENT(in   ) ::   kt      ! time step 
     75      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
    7476      !! 
    7577      INTEGER ::   ji, jj, jk      ! dummy loop indices 
    7678      INTEGER ::   ikbu, ikbv      ! local integers 
    77       REAL(wp)::   zvm, zvt, zvs, z1_2rau0   ! local scalars 
     79      REAL(wp)::   zvm, zvt, zvs, z1_2rho0   ! local scalars 
    7880      REAL(wp), DIMENSION(jpi,jpj)  :: ztswu, ztswv, z2dx, z2dy   ! 2D workspace  
    7981      !!---------------------------------------------------------------------- 
     
    8486         ! 
    8587         CASE( 'TRA' )          !==  Tracers (T & S)  ==! 
    86             DO jk = 1, jpkm1       ! global sum of mask volume trend and trend*T (including interior mask) 
    87                DO jj = 1, jpj 
    88                   DO ji = 1, jpi         
    89                      zvm = e1e2t(ji,jj) * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    90                      zvt = ptrdx(ji,jj,jk) * zvm 
    91                      zvs = ptrdy(ji,jj,jk) * zvm 
    92                      tmo(ktrd) = tmo(ktrd) + zvt    
    93                      smo(ktrd) = smo(ktrd) + zvs 
    94                      t2 (ktrd) = t2(ktrd)  + zvt * tsn(ji,jj,jk,jp_tem) 
    95                      s2 (ktrd) = s2(ktrd)  + zvs * tsn(ji,jj,jk,jp_sal) 
    96                   END DO 
    97                END DO 
    98             END DO 
     88            DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     89               zvm = e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
     90               zvt = ptrdx(ji,jj,jk) * zvm 
     91               zvs = ptrdy(ji,jj,jk) * zvm 
     92               tmo(ktrd) = tmo(ktrd) + zvt    
     93               smo(ktrd) = smo(ktrd) + zvs 
     94               t2 (ktrd) = t2(ktrd)  + zvt * ts(ji,jj,jk,jp_tem,Kmm) 
     95               s2 (ktrd) = s2(ktrd)  + zvs * ts(ji,jj,jk,jp_sal,Kmm) 
     96            END_3D 
    9997            !                       ! linear free surface: diagnose advective flux trough the fixed k=1 w-surface 
    10098            IF( ln_linssh .AND. ktrd == jptra_zad ) THEN   
    101                tmo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:) ) 
    102                smo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:)  ) 
    103                t2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) * e1e2t(:,:) * tmask_i(:,:)  ) 
    104                s2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) * e1e2t(:,:) * tmask_i(:,:)  ) 
     99               tmo(jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) * e1e2t(:,:) * tmask_i(:,:) ) 
     100               smo(jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) * e1e2t(:,:) * tmask_i(:,:)  ) 
     101               t2 (jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) * ts(:,:,1,jp_tem,Kmm) * e1e2t(:,:) * tmask_i(:,:)  ) 
     102               s2 (jptra_sad) = SUM( ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) * ts(:,:,1,jp_sal,Kmm) * e1e2t(:,:) * tmask_i(:,:)  ) 
    105103            ENDIF 
    106104            ! 
     
    117115            ! 
    118116         CASE( 'DYN' )          !==  Momentum and KE  ==!         
    119             DO jk = 1, jpkm1 
    120                DO jj = 1, jpjm1 
    121                   DO ji = 1, jpim1 
    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) 
    126                      umo(ktrd) = umo(ktrd) + zvt 
    127                      vmo(ktrd) = vmo(ktrd) + zvs 
    128                      hke(ktrd) = hke(ktrd) + un(ji,jj,jk) * zvt + vn(ji,jj,jk) * zvs 
    129                   END DO 
    130                END DO 
    131             END DO 
     117            DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
     118               zvt = ptrdx(ji,jj,jk) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
     119                  &                                     * e1e2u  (ji,jj) * e3u(ji,jj,jk,Kmm) 
     120               zvs = ptrdy(ji,jj,jk) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
     121                  &                                     * e1e2v  (ji,jj) * e3u(ji,jj,jk,Kmm) 
     122               umo(ktrd) = umo(ktrd) + zvt 
     123               vmo(ktrd) = vmo(ktrd) + zvs 
     124               hke(ktrd) = hke(ktrd) + uu(ji,jj,jk,Kmm) * zvt + vv(ji,jj,jk,Kmm) * zvs 
     125            END_3D 
    132126            !                  
    133127            IF( ktrd == jpdyn_zdf ) THEN      ! zdf trend: compute separately the surface forcing trend 
    134                z1_2rau0 = 0.5_wp / rau0 
    135                DO jj = 1, jpjm1 
    136                   DO ji = 1, jpim1 
    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) 
    141                      umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 
    142                      vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs 
    143                      hke(jpdyn_tau) = hke(jpdyn_tau) + un(ji,jj,1) * zvt + vn(ji,jj,1) * zvs 
    144                   END DO 
    145                END DO 
     128               z1_2rho0 = 0.5_wp / rho0 
     129               DO_2D( 1, 0, 1, 0 ) 
     130                  zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj) * tmask_i(ji,jj) * umask(ji,jj,jk)   & 
     131                     &                                                     * z1_2rho0       * e1e2u(ji,jj) 
     132                  zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   & 
     133                     &                                                     * z1_2rho0       * e1e2v(ji,jj) 
     134                  umo(jpdyn_tau) = umo(jpdyn_tau) + zvt 
     135                  vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs 
     136                  hke(jpdyn_tau) = hke(jpdyn_tau) + uu(ji,jj,1,Kmm) * zvt + vv(ji,jj,1,Kmm) * zvs 
     137               END_2D 
    146138            ENDIF 
    147139            !                        
     
    150142!               ! 
    151143!               IF( ln_drgimp ) THEN                   ! implicit drag case: compute separately the bottom friction  
    152 !                  z1_2rau0 = 0.5_wp / rau0 
     144!                  z1_2rho0 = 0.5_wp / rho0 
    153145!                  DO jj = 1, jpjm1 
    154146!                     DO ji = 1, jpim1 
    155147!                        ikbu = mbku(ji,jj)                  ! deepest ocean u- & v-levels 
    156148!                        ikbv = mbkv(ji,jj) 
    157 !                        zvt = 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * un(ji,jj,ikbu) * e1e2u(ji,jj) 
    158 !                        zvs = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vn(ji,jj,ikbv) * e1e2v(ji,jj) 
     149!                        zvt = 0.5*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * uu(ji,jj,ikbu,Kmm) * e1e2u(ji,jj) 
     150!                        zvs = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv(ji,jj,ikbv,Kmm) * e1e2v(ji,jj) 
    159151!                        umo(jpdyn_bfri) = umo(jpdyn_bfri) + zvt 
    160152!                        vmo(jpdyn_bfri) = vmo(jpdyn_bfri) + zvs 
    161 !                        hke(jpdyn_bfri) = hke(jpdyn_bfri) + un(ji,jj,ikbu) * zvt + vn(ji,jj,ikbv) * zvs 
     153!                        hke(jpdyn_bfri) = hke(jpdyn_bfri) + uu(ji,jj,ikbu,Kmm) * zvt + vv(ji,jj,ikbv,Kmm) * zvs 
    162154!                     END DO 
    163155!                  END DO 
     
    183175 
    184176 
    185    SUBROUTINE glo_dyn_wri( kt ) 
     177   SUBROUTINE glo_dyn_wri( kt, Kmm ) 
    186178      !!--------------------------------------------------------------------- 
    187179      !!                  ***  ROUTINE glo_dyn_wri  *** 
     
    190182      !!---------------------------------------------------------------------- 
    191183      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     184      INTEGER, INTENT(in) ::   Kmm  ! time level index 
    192185      ! 
    193186      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    209202         zkepe(:,:,:) = 0._wp 
    210203    
    211          CALL eos( tsn, rhd, rhop )       ! now potential density 
    212  
    213          zcof = 0.5_wp / rau0             ! Density flux at w-point 
     204         CALL eos( ts(:,:,:,:,Kmm), rhd, rhop )       ! now potential density 
     205 
     206         zcof = 0.5_wp / rho0             ! Density flux at w-point 
    214207         zkz(:,:,1) = 0._wp 
    215208         DO jk = 2, jpk 
    216             zkz(:,:,jk) = zcof * e1e2t(:,:) * wn(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 
     209            zkz(:,:,jk) = zcof * e1e2t(:,:) * ww(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:) 
    217210         END DO 
    218211          
    219          zcof   = 0.5_wp / rau0           ! Density flux at u and v-points 
    220          DO jk = 1, jpkm1 
    221             DO jj = 1, jpjm1 
    222                DO ji = 1, jpim1 
    223                   zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u_n(ji,jj,jk) * un(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 
    224                   zky(ji,jj,jk) = zcof * e1v(ji,jj) * e3v_n(ji,jj,jk) * vn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 
    225                END DO 
    226             END DO 
    227          END DO 
     212         zcof   = 0.5_wp / rho0           ! Density flux at u and v-points 
     213         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
     214            zkx(ji,jj,jk) = zcof * e2u(ji,jj) * e3u(ji,jj,jk,Kmm)   & 
     215               &                              *  uu(ji,jj,jk,Kmm) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) ) 
     216            zky(ji,jj,jk) = zcof * e1v(ji,jj) * e3v(ji,jj,jk,Kmm)   & 
     217               &                              *  vv(ji,jj,jk,Kmm) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) ) 
     218         END_3D 
    228219          
    229          DO jk = 1, jpkm1                 ! Density flux divergence at t-point 
    230             DO jj = 2, jpjm1 
    231                DO ji = 2, jpim1 
    232                   zkepe(ji,jj,jk) = - (  zkz(ji,jj,jk) - zkz(ji  ,jj  ,jk+1)               & 
    233                      &                 + zkx(ji,jj,jk) - zkx(ji-1,jj  ,jk  )               & 
    234                      &                 + zky(ji,jj,jk) - zky(ji  ,jj-1,jk  )   )           & 
    235                      &              / ( e1e2t(ji,jj) * e3t_n(ji,jj,jk) ) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    236                END DO 
    237             END DO 
    238          END DO 
     220         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     221            zkepe(ji,jj,jk) = - (  zkz(ji,jj,jk) - zkz(ji  ,jj  ,jk+1)               & 
     222               &                 + zkx(ji,jj,jk) - zkx(ji-1,jj  ,jk  )               & 
     223               &                 + zky(ji,jj,jk) - zky(ji  ,jj-1,jk  )   )           & 
     224               &              / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
     225         END_3D 
    239226 
    240227         ! I.2 Basin averaged kinetic energy trend 
     
    242229         peke = 0._wp 
    243230         DO jk = 1, jpkm1 
    244             peke = peke + SUM( zkepe(:,:,jk) * gdept_n(:,:,jk) * e1e2t(:,:) * e3t_n(:,:,jk) ) 
     231            peke = peke + SUM( zkepe(:,:,jk) * gdept(:,:,jk,Kmm) * e1e2t(:,:)   & 
     232               &                               * e3t(:,:,jk,Kmm) ) 
    245233         END DO 
    246234         peke = grav * peke 
     
    363351 9546    FORMAT(' 0 < horizontal diffusion                                  : ', e20.13) 
    364352 9547    FORMAT(' 0 < vertical diffusion                                    : ', e20.13) 
    365  9548    FORMAT(' pressure gradient u2 = - 1/rau0 u.dz(rhop)                : ', e20.13, '  u.dz(rhop) =', e20.13) 
     353 9548    FORMAT(' pressure gradient u2 = - 1/rho0 u.dz(rhop)                : ', e20.13, '  u.dz(rhop) =', e20.13) 
    366354         ! 
    367355         ! Save potential to kinetic energy conversion for next time step 
     
    506494 
    507495 
    508    SUBROUTINE trd_glo_init 
     496   SUBROUTINE trd_glo_init( Kmm ) 
    509497      !!--------------------------------------------------------------------- 
    510498      !!                  ***  ROUTINE trd_glo_init  *** 
     
    512500      !! ** Purpose :   Read the namtrd namelist 
    513501      !!---------------------------------------------------------------------- 
     502      INTEGER, INTENT(in) ::   Kmm   ! time level index 
    514503      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    515504      !!---------------------------------------------------------------------- 
     
    524513      tvolt = 0._wp 
    525514      DO jk = 1, jpkm1 
    526          tvolt = tvolt + SUM( e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) ) 
     515         tvolt = tvolt + SUM( e1e2t(:,:) * e3t(:,:,jk,Kmm) * tmask(:,:,jk) * tmask_i(:,:) ) 
    527516      END DO 
    528517      CALL mpp_sum( 'trdglo', tvolt )   ! sum over the global domain 
     
    538527      tvolv = 0._wp 
    539528 
    540       DO jk = 1, jpk 
    541          DO jj = 2, jpjm1 
    542             DO ji = fs_2, fs_jpim1   ! vector opt. 
    543                tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * e3u_n(ji,jj,jk) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk) 
    544                tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * e3v_n(ji,jj,jk) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 
    545             END DO 
    546          END DO 
    547       END DO 
     529      DO_3D( 0, 0, 0, 0, 1, jpk ) 
     530         tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm)   & 
     531            &                                       * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk) 
     532         tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * e3v(ji,jj,jk,Kmm)   & 
     533            &                                       * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk) 
     534      END_3D 
    548535      CALL mpp_sum( 'trdglo', tvolu )   ! sums over the global domain 
    549536      CALL mpp_sum( 'trdglo', tvolv ) 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdini.F90

    r10068 r13463  
    2525   PUBLIC   trd_init   ! called by nemogcm.F90 module 
    2626 
    27    !! * Substitutions 
    28 #  include "vectopt_loop_substitute.h90" 
    2927   !!---------------------------------------------------------------------- 
    3028   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    3432CONTAINS 
    3533 
    36    SUBROUTINE trd_init 
     34   SUBROUTINE trd_init( Kmm ) 
    3735      !!---------------------------------------------------------------------- 
    3836      !!                  ***  ROUTINE trd_init  *** 
     
    4038      !! ** Purpose :   Initialization of trend diagnostics 
    4139      !!---------------------------------------------------------------------- 
     40      INTEGER, INTENT(in) ::   Kmm  ! time level index 
    4241      INTEGER ::   ios   ! local integer 
    4342      !! 
     
    4645      !!---------------------------------------------------------------------- 
    4746      ! 
    48       REWIND( numnam_ref )              ! Namelist namtrd in reference namelist : trends diagnostic 
    4947      READ  ( numnam_ref, namtrd, IOSTAT = ios, ERR = 901 ) 
    50 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrd in reference namelist', lwp ) 
     48901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrd in reference namelist' ) 
    5149      ! 
    52       REWIND( numnam_cfg )              ! Namelist namtrd in configuration namelist : trends diagnostic 
    5350      READ  ( numnam_cfg, namtrd, IOSTAT = ios, ERR = 902 ) 
    54 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrd in configuration namelist', lwp ) 
     51902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrd in configuration namelist' ) 
    5552      IF(lwm) WRITE( numond, namtrd ) 
    5653      ! 
     
    9693 
    9794      !                             ! diagnostic initialization   
    98       IF( ln_glo_trd )   CALL trd_glo_init      ! global domain averaged trends 
     95      IF( ln_glo_trd )   CALL trd_glo_init( Kmm )      ! global domain averaged trends 
    9996      IF( ln_tra_mxl )   CALL trd_mxl_init      ! mixed-layer          trends   
    10097      IF( ln_vor_trd )   CALL trd_vor_init      ! barotropic vorticity trends 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdken.F90

    r10425 r13463  
    4040 
    4141   !! * Substitutions 
    42 #  include "vectopt_loop_substitute.h90" 
     42#  include "do_loop_substitute.h90" 
     43#  include "domzgr_substitute.h90" 
    4344   !!---------------------------------------------------------------------- 
    4445   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    5960 
    6061 
    61    SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt ) 
     62   SUBROUTINE trd_ken( putrd, pvtrd, ktrd, kt, Kmm ) 
    6263      !!--------------------------------------------------------------------- 
    6364      !!                  ***  ROUTINE trd_ken  *** 
     
    6768      !! ** Method  : - apply lbc to the input masked velocity trends  
    6869      !!              - compute the associated KE trend: 
    69       !!          zke = 0.5 * (  mi-1[ un * putrd * bu ] + mj-1[ vn * pvtrd * bv]  ) / bt 
     70      !!          zke = 0.5 * (  mi-1[ uu(Kmm) * putrd * bu ] + mj-1[ vv(Kmm) * pvtrd * bv]  ) / bt 
    7071      !!      where bu, bv, bt are the volume of u-, v- and t-boxes.  
    7172      !!              - vertical diffusion case (jpdyn_zdf):  
     
    8081      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    8182      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     83      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    8284      ! 
    8385      INTEGER ::   ji, jj, jk       ! dummy loop indices 
     
    8890      !!---------------------------------------------------------------------- 
    8991      ! 
    90       CALL lbc_lnk_multi( 'trdken', putrd, 'U', -1. , pvtrd, 'V', -1. )      ! lateral boundary conditions 
     92      CALL lbc_lnk_multi( 'trdken', putrd, 'U', -1.0_wp , pvtrd, 'V', -1.0_wp )      ! lateral boundary conditions 
    9193      ! 
    9294      nkstp = kt 
    9395      DO jk = 1, jpkm1 
    94          bu   (:,:,jk) =    e1e2u(:,:) * e3u_n(:,:,jk) 
    95          bv   (:,:,jk) =    e1e2v(:,:) * e3v_n(:,:,jk) 
    96          r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t_n(:,:,jk) * tmask(:,:,jk) 
     96         bu   (:,:,jk) =    e1e2u(:,:) * e3u(:,:,jk,Kmm) 
     97         bv   (:,:,jk) =    e1e2v(:,:) * e3v(:,:,jk,Kmm) 
     98         r1_bt(:,:,jk) = r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) * tmask(:,:,jk) 
    9799      END DO 
    98100      ! 
     
    100102      zke(1,:, : ) = 0._wp 
    101103      zke(:,1, : ) = 0._wp 
    102       DO jk = 1, jpkm1 
    103          DO jj = 2, jpj 
    104             DO ji = 2, jpi 
    105                zke(ji,jj,jk) = 0.5_wp * rau0 *( un(ji  ,jj,jk) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
    106                   &                           + un(ji-1,jj,jk) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
    107                   &                           + vn(ji,jj  ,jk) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
    108                   &                           + vn(ji,jj-1,jk) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk)  ) * r1_bt(ji,jj,jk) 
    109             END DO 
    110          END DO 
    111       END DO 
     104      DO_3D( 0, 1, 0, 1, 1, jpkm1 ) 
     105         zke(ji,jj,jk) = 0.5_wp * rho0 *( uu(ji  ,jj,jk,Kmm) * putrd(ji  ,jj,jk) * bu(ji  ,jj,jk)  & 
     106            &                           + uu(ji-1,jj,jk,Kmm) * putrd(ji-1,jj,jk) * bu(ji-1,jj,jk)  & 
     107            &                           + vv(ji,jj  ,jk,Kmm) * pvtrd(ji,jj  ,jk) * bv(ji,jj  ,jk)  & 
     108            &                           + vv(ji,jj-1,jk,Kmm) * pvtrd(ji,jj-1,jk) * bv(ji,jj-1,jk)  ) * r1_bt(ji,jj,jk) 
     109      END_3D 
    112110      ! 
    113111      SELECT CASE( ktrd ) 
     
    122120         !                   !                                          ! wind stress trends 
    123121                                 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) , zke2d(jpi,jpj) ) 
    124                            z2dx(:,:) = un(:,:,1) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 
    125                            z2dy(:,:) = vn(:,:,1) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 
     122                           z2dx(:,:) = uu(:,:,1,Kmm) * ( utau_b(:,:) + utau(:,:) ) * e1e2u(:,:) * umask(:,:,1) 
     123                           z2dy(:,:) = vv(:,:,1,Kmm) * ( vtau_b(:,:) + vtau(:,:) ) * e1e2v(:,:) * vmask(:,:,1) 
    126124                           zke2d(1,:) = 0._wp   ;   zke2d(:,1) = 0._wp 
    127                            DO jj = 2, jpj 
    128                               DO ji = 2, jpi 
    129                                  zke2d(ji,jj) = r1_rau0 * 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
    130                                  &                                   + z2dy(ji,jj) + z2dy(ji,jj-1)   ) * r1_bt(ji,jj,1) 
    131                               END DO 
    132                            END DO 
     125                           DO_2D( 0, 1, 0, 1 ) 
     126                              zke2d(ji,jj) = r1_rho0 * 0.5_wp * (   z2dx(ji,jj) + z2dx(ji-1,jj)   & 
     127                              &                                   + z2dy(ji,jj) + z2dy(ji,jj-1)   ) * r1_bt(ji,jj,1) 
     128                           END_2D 
    133129                                 CALL iom_put( "ketrd_tau"   , zke2d )  !  
    134130                                 DEALLOCATE( z2dx , z2dy , zke2d ) 
     
    141137!                  ikbu = mbku(ji,jj)         ! deepest ocean u- & v-levels 
    142138!                  ikbv = mbkv(ji,jj)    
    143 !                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) 
    144 !                  z2dy(ji,jj) = vn(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) 
     139!                  z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) 
     140!                  z2dy(ji,jj) = vv(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) 
    145141!               END DO 
    146142!            END DO 
     
    157153         CASE( jpdyn_atf )   ;   CALL iom_put( "ketrd_atf"   , zke )    ! asselin filter trends  
    158154!! a faire !!!!  idee changer dynnxt pour avoir un appel a jpdyn_bfr avant le swap !!! 
    159 !! reflechir a une possible sauvegarde du "vrai" un,vn pour le calcul de atf.... 
     155!! reflechir a une possible sauvegarde du "vrai" uu(Kmm),vv(Kmm) pour le calcul de atf.... 
    160156! 
    161157!         IF( ln_drgimp ) THEN                                          ! bottom friction (implicit case) 
     
    164160!                  ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    165161!                  ikbv = mbkv(ji,jj) 
    166 !                  z2dx(ji,jj) = un(ji,jj,ikbu) * bfrua(ji,jj) * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu) 
    167 !                  z2dy(ji,jj) = un(ji,jj,ikbu) * bfrva(ji,jj) * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv) 
     162!                  z2dx(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrua(ji,jj) * uu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 
     163!                  z2dy(ji,jj) = uu(ji,jj,ikbu,Kmm) * bfrva(ji,jj) * vv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 
    168164!               END DO 
    169165!            END DO 
     
    179175        CASE( jpdyn_ken )   ;   ! kinetic energy 
    180176                    ! called in dynnxt.F90 before asselin time filter 
    181                     ! with putrd=ua and pvtrd=va 
     177                    ! with putrd=uu(Krhs) and pvtrd=vv(Krhs) 
    182178                    zke(:,:,:) = 0.5_wp * zke(:,:,:) 
    183179                    CALL iom_put( "KE", zke ) 
    184180                    ! 
    185                     CALL ken_p2k( kt , zke ) 
     181                    CALL ken_p2k( kt , zke, Kmm ) 
    186182                      CALL iom_put( "ketrd_convP2K", zke )     ! conversion -rau*g*w 
    187183         ! 
     
    191187 
    192188 
    193    SUBROUTINE ken_p2k( kt , pconv ) 
     189   SUBROUTINE ken_p2k( kt , pconv, Kmm ) 
    194190      !!--------------------------------------------------------------------- 
    195191      !!                 ***  ROUTINE ken_p2k  *** 
     
    202198      !!----------------------------------------------------------------------  
    203199      INTEGER                   , INTENT(in   ) ::   kt      ! ocean time-step index 
     200      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
    204201      REAL(wp), DIMENSION(:,:,:), INTENT(  out) ::   pconv   !  
    205202      ! 
     
    211208      ! 
    212209      ! Local constant initialization  
    213       zcoef = - rau0 * grav * 0.5_wp       
     210      zcoef = - rho0 * grav * 0.5_wp       
    214211       
    215212      !  Surface value (also valid in partial step case) 
    216       zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * wn(:,:,1) * e3w_n(:,:,1) 
     213      zconv(:,:,1) = zcoef * ( 2._wp * rhd(:,:,1) ) * ww(:,:,1) * e3w(:,:,1,Kmm) 
    217214 
    218215      ! interior value (2=<jk=<jpkm1) 
    219216      DO jk = 2, jpk 
    220          zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * wn(:,:,jk) * e3w_n(:,:,jk) 
     217         zconv(:,:,jk) = zcoef * ( rhd(:,:,jk) + rhd(:,:,jk-1) ) * ww(:,:,jk) * e3w(:,:,jk,Kmm) 
    221218      END DO 
    222219 
    223220      ! conv value on T-point 
    224       DO jk = 1, jpkm1 
    225          DO jj = 1, jpj 
    226             DO ji = 1, jpi 
    227                zcoef = 0.5_wp / e3t_n(ji,jj,jk) 
    228                pconv(ji,jj,jk) = zcoef * ( zconv(ji,jj,jk) + zconv(ji,jj,jk+1) ) * tmask(ji,jj,jk) 
    229             END DO 
    230          END DO 
    231       END DO 
     221      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     222         zcoef = 0.5_wp / e3t(ji,jj,jk,Kmm) 
     223         pconv(ji,jj,jk) = zcoef * ( zconv(ji,jj,jk) + zconv(ji,jj,jk+1) ) * tmask(ji,jj,jk) 
     224      END_3D 
    232225      ! 
    233226   END SUBROUTINE ken_p2k 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdmxl.F90

    r10425 r13463  
    6868   INTEGER ::   ionce, icount                    
    6969 
     70   !! * Substitutions 
     71#  include "do_loop_substitute.h90" 
     72#  include "domzgr_substitute.h90" 
    7073   !!---------------------------------------------------------------------- 
    7174   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    8689 
    8790 
    88    SUBROUTINE trd_tra_mxl( ptrdx, ptrdy, ktrd, kt, p2dt, kmxln ) 
     91   SUBROUTINE trd_tra_mxl( ptrdx, ptrdy, ktrd, kt, p2dt, kmxln, Kmm ) 
    8992      !!---------------------------------------------------------------------- 
    9093      !!                  ***  ROUTINE trd_tra_mng  *** 
     
    98101      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index 
    99102      INTEGER                   , INTENT(in   ) ::   kt      ! time step index 
     103      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
    100104      REAL(wp)                  , INTENT(in   ) ::   p2dt    ! time step  [s] 
    101105      REAL(wp), DIMENSION(:,:)  , INTENT(in   ) ::   kmxln   ! number of t-box for the vertical average  
     
    116120         ! 
    117121         wkx(:,:,:) = 0._wp         !==  now ML weights for vertical averaging  ==! 
    118          DO jk = 1, jpktrd               ! initialize wkx with vertical scale factor in mixed-layer 
    119             DO jj = 1,jpj 
    120                DO ji = 1,jpi 
    121                   IF( jk - kmxln(ji,jj) < 0 )   wkx(ji,jj,jk) = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    122                END DO 
    123             END DO 
    124          END DO 
     122         DO_3D( 1, 1, 1, 1, 1, jpktrd ) 
     123            IF( jk - kmxln(ji,jj) < 0 )   THEN 
     124               wkx(ji,jj,jk) = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
     125            ENDIF 
     126         END_3D 
    125127         hmxl(:,:) = 0._wp               ! NOW mixed-layer depth 
    126128         DO jk = 1, jpktrd 
     
    136138         tml(:,:) = 0._wp   ;   sml(:,:) = 0._wp 
    137139         DO jk = 1, jpktrd 
    138             tml(:,:) = tml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_tem) 
    139             sml(:,:) = sml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_sal) 
     140            tml(:,:) = tml(:,:) + wkx(:,:,jk) * ts(:,:,jk,jp_tem,Kmm) 
     141            sml(:,:) = sml(:,:) + wkx(:,:,jk) * ts(:,:,jk,jp_sal,Kmm) 
    140142         END DO 
    141143         ! 
     
    152154!!gm to be put juste before the output ! 
    153155!      ! Lateral boundary conditions 
    154 !      CALL lbc_lnk_multi( 'trdmxl', tmltrd(:,:,jl), 'T', 1. , smltrd(:,:,jl), 'T', 1. ) 
     156!      CALL lbc_lnk_multi( 'trdmxl', tmltrd(:,:,jl), 'T', 1.0_wp , smltrd(:,:,jl), 'T', 1.0_wp ) 
    155157!!gm end 
    156158 
     
    371373         hmxlbn(:,:) = hmxl(:,:) 
    372374 
    373          IF( ln_ctl ) THEN 
     375         IF( sn_cfctl%l_prtctl ) THEN 
    374376            WRITE(numout,*) '             we reach kt == nit000 + 1 = ', nit000+1 
    375377            CALL prt_ctl(tab2d_1=tmlbb   , clinfo1=' tmlbb   -   : ', mask1=tmask) 
     
    380382      END IF 
    381383 
    382       IF( ( ln_rstart ) .AND. ( kt == nit000 ) .AND. ( ln_ctl ) ) THEN 
     384      IF( ( ln_rstart ) .AND. ( kt == nit000 ) .AND. sn_cfctl%l_prtctl ) THEN 
    383385         IF( ln_trdmxl_instant ) THEN 
    384386            WRITE(numout,*) '             restart from kt == nit000 = ', nit000 
     
    470472         !-- Lateral boundary conditions 
    471473         !         ... temperature ...                    ... salinity ... 
    472          CALL lbc_lnk_multi( 'trdmxl', ztmltot , 'T', 1., zsmltot , 'T', 1., & 
    473                   &          ztmlres , 'T', 1., zsmlres , 'T', 1., & 
    474                   &          ztmlatf , 'T', 1., zsmlatf , 'T', 1. ) 
     474         CALL lbc_lnk_multi( 'trdmxl', ztmltot , 'T', 1.0_wp, zsmltot , 'T', 1.0_wp, & 
     475                  &          ztmlres , 'T', 1.0_wp, zsmlres , 'T', 1.0_wp, & 
     476                  &          ztmlatf , 'T', 1.0_wp, zsmlatf , 'T', 1.0_wp ) 
    475477 
    476478 
     
    521523         !-- Lateral boundary conditions 
    522524         !         ... temperature ...                    ... salinity ... 
    523          CALL lbc_lnk_multi( 'trdmxl', ztmltot2, 'T', 1., zsmltot2, 'T', 1., & 
    524                   &          ztmlres2, 'T', 1., zsmlres2, 'T', 1. ) 
    525          ! 
    526          CALL lbc_lnk_multi( 'trdmxl', ztmltrd2(:,:,:), 'T', 1., zsmltrd2(:,:,:), 'T', 1. ) ! /  in the NetCDF trends file 
     525         CALL lbc_lnk_multi( 'trdmxl', ztmltot2, 'T', 1.0_wp, zsmltot2, 'T', 1.0_wp, & 
     526                  &          ztmlres2, 'T', 1.0_wp, zsmlres2, 'T', 1.0_wp ) 
     527         ! 
     528         CALL lbc_lnk_multi( 'trdmxl', ztmltrd2(:,:,:), 'T', 1.0_wp, zsmltrd2(:,:,:), 'T', 1.0_wp ) ! /  in the NetCDF trends file 
    527529          
    528530         ! III.3 Time evolution array swap 
     
    548550         hmxlbn         (:,:)   = hmxl    (:,:) 
    549551          
    550          IF( ln_ctl ) THEN 
     552         IF( sn_cfctl%l_prtctl ) THEN 
    551553            IF( ln_trdmxl_instant ) THEN 
    552554               CALL prt_ctl(tab2d_1=tmlbb   , clinfo1=' tmlbb   -   : ', mask1=tmask) 
     
    732734      !!---------------------------------------------------------------------- 
    733735      ! 
    734       REWIND( numnam_ref )              ! Namelist namtrd_mxl in reference namelist : mixed layer trends diagnostic 
    735736      READ  ( numnam_ref, namtrd_mxl, IOSTAT = ios, ERR = 901 ) 
    736 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrd_mxl in reference namelist', lwp ) 
    737  
    738       REWIND( numnam_cfg )              ! Namelist namtrd_mxl in configuration namelist : mixed layer trends diagnostic 
     737901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrd_mxl in reference namelist' ) 
     738 
    739739      READ  ( numnam_cfg, namtrd_mxl, IOSTAT = ios, ERR = 902 ) 
    740 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrd_mxl in configuration namelist', lwp ) 
     740902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrd_mxl in configuration namelist' ) 
    741741      IF(lwm) WRITE( numond, namtrd_mxl ) 
    742742      ! 
     
    764764 
    765765      IF( MOD( nitend, nn_trd ) /= 0 ) THEN 
    766          WRITE(numout,cform_err) 
    767          WRITE(numout,*) '                Your nitend parameter, nitend = ', nitend 
    768          WRITE(numout,*) '                is no multiple of the trends diagnostics frequency        ' 
    769          WRITE(numout,*) '                          you defined, nn_trd   = ', nn_trd 
    770          WRITE(numout,*) '                This will not allow you to restart from this simulation.  ' 
    771          WRITE(numout,*) '                You should reconsider this choice.                        '  
    772          WRITE(numout,*)  
    773          WRITE(numout,*) '                N.B. the nitend parameter is also constrained to be a     ' 
    774          WRITE(numout,*) '                     multiple of the nn_fsbc parameter ' 
    775          CALL ctl_stop( 'trd_mxl_init: see comment just above' ) 
     766         WRITE(ctmp1,*) '                Your nitend parameter, nitend = ', nitend 
     767         WRITE(ctmp2,*) '                is no multiple of the trends diagnostics frequency        ' 
     768         WRITE(ctmp3,*) '                          you defined, nn_trd   = ', nn_trd 
     769         WRITE(ctmp4,*) '                This will not allow you to restart from this simulation.  ' 
     770         WRITE(ctmp5,*) '                You should reconsider this choice.                        '  
     771         WRITE(ctmp6,*)  
     772         WRITE(ctmp7,*) '                N.B. the nitend parameter is also constrained to be a     ' 
     773         WRITE(ctmp8,*) '                     multiple of the nn_fsbc parameter ' 
     774         CALL ctl_stop( ctmp1, ctmp2, ctmp3, ctmp4, ctmp5, ctmp6, ctmp7, ctmp8 ) 
    776775      END IF 
    777776 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdmxl_rst.F90

    r10425 r13463  
    4747      !!-------------------------------------------------------------------------------- 
    4848 
     49      IF( .NOT. ln_rst_list .AND. nn_stock == -1 )   RETURN   ! we will never do any restart 
     50 
    4951      ! to get better performances with NetCDF format: 
    5052      ! we open and define the ocean restart_mxl file one time step before writing the data (-> at nitrst - 1) 
    5153      ! except if we write ocean restart_mxl files every time step or if an ocean restart_mxl file was writen at nitend - 1 
    52       IF( kt == nitrst - 1 .OR. nstock == 1 .OR. ( kt == nitend .AND. MOD( nitend - 1, nstock ) == 0 ) ) THEN 
     54      IF( kt == nitrst - 1 .OR. nn_stock == 1 .OR. ( kt == nitend .AND. MOD( nitend - 1, nn_stock ) == 0 ) ) THEN 
    5355         ! beware of the format used to write kt (default is i8.8, that should be large enough...) 
    5456         IF( nitrst > 999999999 ) THEN   ;   WRITE(clkt, *       ) nitrst 
     
    147149      IF( ln_trdmxl_instant ) THEN  
    148150         !-- Temperature 
    149          CALL iom_get( inum, jpdom_autoglo, 'tmlbb'           , tmlbb          ) 
    150          CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn          ) 
    151          CALL iom_get( inum, jpdom_autoglo, 'tmlatfb'         , tmlatfb        ) 
     151         CALL iom_get( inum, jpdom_auto, 'tmlbb'           , tmlbb          ) 
     152         CALL iom_get( inum, jpdom_auto, 'tmlbn'           , tmlbn          ) 
     153         CALL iom_get( inum, jpdom_auto, 'tmlatfb'         , tmlatfb        ) 
    152154         ! 
    153155         !-- Salinity 
    154          CALL iom_get( inum, jpdom_autoglo, 'smlbb'           , smlbb          ) 
    155          CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn          ) 
    156          CALL iom_get( inum, jpdom_autoglo, 'smlatfb'         , smlatfb        ) 
     156         CALL iom_get( inum, jpdom_auto, 'smlbb'           , smlbb          ) 
     157         CALL iom_get( inum, jpdom_auto, 'smlbn'           , smlbn          ) 
     158         CALL iom_get( inum, jpdom_auto, 'smlatfb'         , smlatfb        ) 
    157159      ELSE 
    158          CALL iom_get( inum, jpdom_autoglo, 'hmxlbn'          , hmxlbn         ) ! needed for hmxl_sum 
     160         CALL iom_get( inum, jpdom_auto, 'hmxlbn'          , hmxlbn         ) ! needed for hmxl_sum 
    159161         ! 
    160162         !-- Temperature 
    161          CALL iom_get( inum, jpdom_autoglo, 'tmlbn'           , tmlbn          ) ! needed for tml_sum 
    162          CALL iom_get( inum, jpdom_autoglo, 'tml_sumb'        , tml_sumb       ) 
     163         CALL iom_get( inum, jpdom_auto, 'tmlbn'           , tmlbn          ) ! needed for tml_sum 
     164         CALL iom_get( inum, jpdom_auto, 'tml_sumb'        , tml_sumb       ) 
    163165         DO jk = 1, jpltrd 
    164166            IF( jk < 10 ) THEN   ;   WRITE(charout,FMT="('tmltrd_csum_ub_', I1)")   jk 
    165167            ELSE                 ;   WRITE(charout,FMT="('tmltrd_csum_ub_', I2)")   jk 
    166168            ENDIF 
    167             CALL iom_get( inum, jpdom_autoglo, charout, tmltrd_csum_ub(:,:,jk) ) 
     169            CALL iom_get( inum, jpdom_auto, charout, tmltrd_csum_ub(:,:,jk) ) 
    168170         END DO 
    169          CALL iom_get( inum, jpdom_autoglo, 'tmltrd_atf_sumb' , tmltrd_atf_sumb) 
     171         CALL iom_get( inum, jpdom_auto, 'tmltrd_atf_sumb' , tmltrd_atf_sumb) 
    170172         ! 
    171173         !-- Salinity 
    172          CALL iom_get( inum, jpdom_autoglo, 'smlbn'           , smlbn          ) ! needed for sml_sum 
    173          CALL iom_get( inum, jpdom_autoglo, 'sml_sumb'        , sml_sumb       ) 
     174         CALL iom_get( inum, jpdom_auto, 'smlbn'           , smlbn          ) ! needed for sml_sum 
     175         CALL iom_get( inum, jpdom_auto, 'sml_sumb'        , sml_sumb       ) 
    174176         DO jk = 1, jpltrd 
    175177            IF( jk < 10 ) THEN   ;   WRITE(charout,FMT="('smltrd_csum_ub_', I1)")   jk 
    176178            ELSE                 ;   WRITE(charout,FMT="('smltrd_csum_ub_', I2)")   jk 
    177179            ENDIF 
    178             CALL iom_get( inum, jpdom_autoglo, charout, smltrd_csum_ub(:,:,jk) ) 
     180            CALL iom_get( inum, jpdom_auto, charout, smltrd_csum_ub(:,:,jk) ) 
    179181         END DO 
    180          CALL iom_get( inum, jpdom_autoglo, 'smltrd_atf_sumb' , smltrd_atf_sumb) 
     182         CALL iom_get( inum, jpdom_auto, 'smltrd_atf_sumb' , smltrd_atf_sumb) 
    181183         ! 
    182184         CALL iom_close( inum ) 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdpen.F90

    r10425 r13463  
    3636 
    3737   !! * Substitutions 
    38 #  include "vectopt_loop_substitute.h90" 
     38#  include "domzgr_substitute.h90" 
    3939   !!---------------------------------------------------------------------- 
    4040   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    4242   !! Software governed by the CeCILL license (see ./LICENSE) 
    4343   !!---------------------------------------------------------------------- 
     44 
    4445CONTAINS 
    4546 
     
    5556 
    5657 
    57    SUBROUTINE trd_pen( ptrdx, ptrdy, ktrd, kt, pdt ) 
     58   SUBROUTINE trd_pen( ptrdx, ptrdy, ktrd, kt, pdt, Kmm ) 
    5859      !!--------------------------------------------------------------------- 
    5960      !!                  ***  ROUTINE trd_tra_mng  *** 
     
    6667      INTEGER                   , INTENT(in) ::   ktrd           ! tracer trend index 
    6768      INTEGER                   , INTENT(in) ::   kt             ! time step index 
     69      INTEGER                   , INTENT(in) ::   Kmm            ! time level index 
    6870      REAL(wp)                  , INTENT(in) ::   pdt            ! time step [s] 
    6971      ! 
     
    7779      IF( kt /= nkstp ) THEN     ! full eos: set partial derivatives at the 1st call of kt time step 
    7880         nkstp = kt 
    79          CALL eos_pen( tsn, rab_PE, zpe ) 
     81         CALL eos_pen( ts(:,:,:,:,Kmm), rab_PE, zpe, Kmm ) 
    8082         CALL iom_put( "alphaPE", rab_pe(:,:,:,jp_tem) ) 
    8183         CALL iom_put( "betaPE" , rab_pe(:,:,:,jp_sal) ) 
     
    9597                                IF( ln_linssh ) THEN                   ! cst volume : adv flux through z=0 surface 
    9698                                   ALLOCATE( z2d(jpi,jpj) ) 
    97                                    z2d(:,:) = wn(:,:,1) * ( & 
    98                                      &   - ( rab_n(:,:,1,jp_tem) + rab_pe(:,:,1,jp_tem) ) * tsn(:,:,1,jp_tem)    & 
    99                                      &   + ( rab_n(:,:,1,jp_sal) + rab_pe(:,:,1,jp_sal) ) * tsn(:,:,1,jp_sal)    & 
    100                                      & ) / e3t_n(:,:,1) 
     99                                   z2d(:,:) = ww(:,:,1) * ( & 
     100                                     &   - ( rab_n(:,:,1,jp_tem) + rab_pe(:,:,1,jp_tem) ) * ts(:,:,1,jp_tem,Kmm)    & 
     101                                     &   + ( rab_n(:,:,1,jp_sal) + rab_pe(:,:,1,jp_sal) ) * ts(:,:,1,jp_sal,Kmm)    & 
     102                                     & ) / e3t(:,:,1,Kmm) 
    101103                                   CALL iom_put( "petrd_sad" , z2d ) 
    102104                                   DEALLOCATE( z2d ) 
     
    112114      CASE ( jptra_bbc  )   ;   CALL iom_put( "petrd_bbc" , zpe )   ! bottom bound cond (geoth flux) 
    113115      CASE ( jptra_atf  )   ;   CALL iom_put( "petrd_atf" , zpe )   ! asselin time filter (last trend) 
    114                                 !IF( ln_linssh ) THEN                   ! cst volume : ssh term (otherwise include in e3t variation) 
    115                                 !   ALLOCATE( z2d(jpi,jpj) ) 
    116                                 !   z2d(:,:) = ( ssha(:,:) - sshb(:,:) )                 & 
    117                                 !      &     * (   dPE_dt(:,:,1) * tsn(:,:,1,jp_tem)    & 
    118                                 !      &         + dPE_ds(:,:,1) * tsn(:,:,1,jp_sal)  ) / ( e3t_n(:,:,1) * pdt ) 
    119                                 !   CALL iom_put( "petrd_sad" , z2d ) 
    120                                 !   DEALLOCATE( z2d ) 
    121                                 !ENDIF 
    122116         ! 
    123117      END SELECT 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdtra.F90

    r10425 r13463  
    4141 
    4242   !! * Substitutions 
    43 #  include "vectopt_loop_substitute.h90" 
     43#  include "do_loop_substitute.h90" 
     44#  include "domzgr_substitute.h90" 
    4445   !!---------------------------------------------------------------------- 
    4546   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    6061 
    6162 
    62    SUBROUTINE trd_tra( kt, ctype, ktra, ktrd, ptrd, pun, ptra ) 
     63   SUBROUTINE trd_tra( kt, Kmm, Krhs, ctype, ktra, ktrd, ptrd, pu, ptra ) 
    6364      !!--------------------------------------------------------------------- 
    6465      !!                  ***  ROUTINE trd_tra  *** 
     
    7778      INTEGER                         , INTENT(in)           ::   ktra    ! tracer index 
    7879      INTEGER                         , INTENT(in)           ::   ktrd    ! tracer trend index 
     80      INTEGER                         , INTENT(in)           ::   Kmm, Krhs ! time level indices 
    7981      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)           ::   ptrd    ! tracer trend  or flux 
    80       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   pun     ! now velocity  
     82      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   pu      ! now velocity  
    8183      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   ptra    ! now tracer variable 
    8284      ! 
    83       INTEGER ::   jk   ! loop indices 
     85      INTEGER ::   jk    ! loop indices 
     86      INTEGER ::   i01   ! 0 or 1 
    8487      REAL(wp),        DIMENSION(jpi,jpj,jpk) ::   ztrds             ! 3D workspace 
    8588      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zwt, zws, ztrdt   ! 3D workspace 
     
    8992         IF( trd_tra_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trd_tra : unable to allocate arrays' ) 
    9093      ENDIF 
    91  
     94      ! 
     95      i01 = COUNT( (/ PRESENT(pu) .OR. ( ktrd /= jptra_xad .AND. ktrd /= jptra_yad .AND. ktrd /= jptra_zad ) /) ) 
     96      ! 
    9297      IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN   !==  Temperature trend  ==! 
    9398         ! 
    94          SELECT CASE( ktrd ) 
     99         SELECT CASE( ktrd*i01 ) 
    95100         !                            ! advection: transform the advective flux into a trend 
    96          CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx )  
    97          CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty )  
    98          CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt  )  
     101         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pu, ptra, 'X', trdtx, Kmm )  
     102         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pu, ptra, 'Y', trdty, Kmm )  
     103         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pu, ptra, 'Z', trdt, Kmm ) 
    99104         CASE( jptra_bbc,    &        ! qsr, bbc: on temperature only, send to trd_tra_mng 
    100105            &  jptra_qsr )   ;   trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    101106                                 ztrds(:,:,:) = 0._wp 
    102                                  CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 
     107                                 CALL trd_tra_mng( trdt, ztrds, ktrd, kt, Kmm ) 
    103108 !!gm Gurvan, verify the jptra_evd trend please ! 
    104109         CASE( jptra_evd )   ;   avt_evd(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
     
    111116      IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN      !==  Salinity trends  ==! 
    112117         ! 
    113          SELECT CASE( ktrd ) 
     118         SELECT CASE( ktrd*i01 ) 
    114119         !                            ! advection: transform the advective flux into a trend 
    115120         !                            !            and send T & S trends to trd_tra_mng 
    116          CASE( jptra_xad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'X'  , ztrds )  
    117                                   CALL trd_tra_mng( trdtx, ztrds, ktrd, kt   ) 
    118          CASE( jptra_yad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Y'  , ztrds )  
    119                                   CALL trd_tra_mng( trdty, ztrds, ktrd, kt   ) 
    120          CASE( jptra_zad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Z'  , ztrds )  
    121                                   CALL trd_tra_mng( trdt , ztrds, ktrd, kt   ) 
     121         CASE( jptra_xad  )   ;   CALL trd_tra_adv( ptrd , pu  , ptra, 'X'  , ztrds, Kmm )  
     122                                  CALL trd_tra_mng( trdtx, ztrds, ktrd, kt, Kmm   ) 
     123         CASE( jptra_yad  )   ;   CALL trd_tra_adv( ptrd , pu  , ptra, 'Y'  , ztrds, Kmm )  
     124                                  CALL trd_tra_mng( trdty, ztrds, ktrd, kt, Kmm   ) 
     125         CASE( jptra_zad  )   ;   CALL trd_tra_adv( ptrd , pu  , ptra, 'Z'  , ztrds, Kmm )  
     126                                  CALL trd_tra_mng( trdt , ztrds, ktrd, kt, Kmm   ) 
    122127         CASE( jptra_zdfp )           ! diagnose the "PURE" Kz trend (here: just before the swap) 
    123128            !                         ! iso-neutral diffusion case otherwise jptra_zdf is "PURE" 
     
    127132            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
    128133            DO jk = 2, jpk 
    129                zwt(:,:,jk) = avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    130                zws(:,:,jk) = avs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     134               zwt(:,:,jk) = avt(:,:,jk) * ( ts(:,:,jk-1,jp_tem,Krhs) - ts(:,:,jk,jp_tem,Krhs) )   & 
     135                  &        / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 
     136               zws(:,:,jk) = avs(:,:,jk) * ( ts(:,:,jk-1,jp_sal,Krhs) - ts(:,:,jk,jp_sal,Krhs) )   & 
     137                  &        / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 
    131138            END DO 
    132139            ! 
    133140            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
    134141            DO jk = 1, jpkm1 
    135                ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t_n(:,:,jk) 
    136                ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t_n(:,:,jk)  
     142               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 
     143               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t(:,:,jk,Kmm)  
    137144            END DO 
    138             CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt 
     145            CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt, Kmm 
    139146            ! 
    140147            !                         ! Also calculate EVD trend at this point.  
    141148            zwt(:,:,:) = 0._wp   ;   zws(:,:,:) = 0._wp            ! vertical diffusive fluxes 
    142149            DO jk = 2, jpk 
    143                zwt(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    144                zws(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     150               zwt(:,:,jk) = avt_evd(:,:,jk) * ( ts(:,:,jk-1,jp_tem,Krhs) - ts(:,:,jk,jp_tem,Krhs) )   & 
     151                  &            / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 
     152               zws(:,:,jk) = avt_evd(:,:,jk) * ( ts(:,:,jk-1,jp_sal,Krhs) - ts(:,:,jk,jp_sal,Krhs) )   & 
     153                  &            / e3w(:,:,jk,Kmm) * tmask(:,:,jk) 
    145154            END DO 
    146155            ! 
    147156            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
    148157            DO jk = 1, jpkm1 
    149                ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t_n(:,:,jk) 
    150                ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t_n(:,:,jk)  
     158               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t(:,:,jk,Kmm) 
     159               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t(:,:,jk,Kmm)  
    151160            END DO 
    152             CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt 
     161            CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt, Kmm 
    153162            ! 
    154163            DEALLOCATE( zwt, zws, ztrdt ) 
     
    156165         CASE DEFAULT                 ! other trends: mask and send T & S trends to trd_tra_mng 
    157166            ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    158             CALL trd_tra_mng( trdt, ztrds, ktrd, kt 
     167            CALL trd_tra_mng( trdt, ztrds, ktrd, kt, Kmm 
    159168         END SELECT 
    160169      ENDIF 
     
    162171      IF( ctype == 'TRC' ) THEN                           !==  passive tracer trend  ==! 
    163172         ! 
    164          SELECT CASE( ktrd ) 
     173         SELECT CASE( ktrd*i01 ) 
    165174         !                            ! advection: transform the advective flux into a masked trend 
    166          CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds )  
    167          CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds )  
    168          CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds )  
     175         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pu , ptra, 'X', ztrds, Kmm )  
     176         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pu , ptra, 'Y', ztrds, Kmm )  
     177         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pu , ptra, 'Z', ztrds, Kmm )  
    169178         CASE DEFAULT                 ! other trends: just masked  
    170179                                 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:) 
    171180         END SELECT 
    172181         !                            ! send trend to trd_trc 
    173          CALL trd_trc( ztrds, ktra, ktrd, kt )  
     182         CALL trd_trc( ztrds, ktra, ktrd, kt, Kmm )  
    174183         ! 
    175184      ENDIF 
     
    178187 
    179188 
    180    SUBROUTINE trd_tra_adv( pf, pun, ptn, cdir, ptrd ) 
     189   SUBROUTINE trd_tra_adv( pf, pu, pt, cdir, ptrd, Kmm ) 
    181190      !!--------------------------------------------------------------------- 
    182191      !!                  ***  ROUTINE trd_tra_adv  *** 
     
    191200      !!---------------------------------------------------------------------- 
    192201      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pf      ! advective flux in one direction 
    193       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pun     ! now velocity   in one direction 
    194       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   ptn     ! now or before tracer  
     202      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pu      ! now velocity   in one direction 
     203      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pt      ! now or before tracer  
    195204      CHARACTER(len=1)                , INTENT(in   ) ::   cdir    ! X/Y/Z direction 
    196205      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(  out) ::   ptrd    ! advective trend in one direction 
     206      INTEGER,  INTENT(in)                            ::   Kmm     ! time level index 
    197207      ! 
    198208      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     
    211221      ptrd(:,:,jpk) = 0._wp 
    212222      ! 
    213       DO jk = 1, jpkm1         ! advective trend 
    214          DO jj = 2, jpjm1 
    215             DO ji = fs_2, fs_jpim1   ! vector opt. 
    216                ptrd(ji,jj,jk) = - (     pf (ji,jj,jk) - pf (ji-ii,jj-ij,jk-ik)                        & 
    217                  &                  - ( pun(ji,jj,jk) - pun(ji-ii,jj-ij,jk-ik) ) * ptn(ji,jj,jk)  )   & 
    218                  &              * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    219             END DO 
    220          END DO 
    221       END DO 
     223      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     224         ptrd(ji,jj,jk) = - (     pf (ji,jj,jk) - pf (ji-ii,jj-ij,jk-ik)                        & 
     225           &                  - ( pu(ji,jj,jk) - pu(ji-ii,jj-ij,jk-ik) ) * pt(ji,jj,jk)  )   & 
     226           &              * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
     227      END_3D 
    222228      ! 
    223229   END SUBROUTINE trd_tra_adv 
    224230 
    225231 
    226    SUBROUTINE trd_tra_mng( ptrdx, ptrdy, ktrd, kt ) 
     232   SUBROUTINE trd_tra_mng( ptrdx, ptrdy, ktrd, kt, Kmm ) 
    227233      !!--------------------------------------------------------------------- 
    228234      !!                  ***  ROUTINE trd_tra_mng  *** 
     
    236242      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index 
    237243      INTEGER                   , INTENT(in   ) ::   kt      ! time step 
    238       !!---------------------------------------------------------------------- 
    239  
    240       IF( neuler == 0 .AND. kt == nit000    ) THEN   ;   r2dt =      rdt      ! = rdt (restart with Euler time stepping) 
    241       ELSEIF(               kt <= nit000 + 1) THEN   ;   r2dt = 2. * rdt      ! = 2 rdt (leapfrog) 
    242       ENDIF 
     244      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
     245      !!---------------------------------------------------------------------- 
    243246 
    244247      !                   ! 3D output of tracers trends using IOM interface 
    245       IF( ln_tra_trd )   CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt ) 
     248      IF( ln_tra_trd )   CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt, Kmm ) 
    246249 
    247250      !                   ! Integral Constraints Properties for tracers trends                                       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    248       IF( ln_glo_trd )   CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt ) 
     251      IF( ln_glo_trd )   CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt, Kmm ) 
    249252 
    250253      !                   ! Potential ENergy trends 
    251       IF( ln_PE_trd  )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt ) 
     254      IF( ln_PE_trd  )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, rDt, Kmm ) 
    252255 
    253256      !                   ! Mixed layer trends for active tracers 
     
    282285         CASE ( jptra_atf )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_atf, '3D' )   ! asselin time filter (last trend) 
    283286                                   ! 
    284                                        CALL trd_mxl( kt, r2dt )                             ! trends: Mixed-layer (output) 
     287                                       CALL trd_mxl( kt, rDt )                             ! trends: Mixed-layer (output) 
    285288         END SELECT 
    286289         ! 
     
    290293 
    291294 
    292    SUBROUTINE trd_tra_iom( ptrdx, ptrdy, ktrd, kt ) 
     295   SUBROUTINE trd_tra_iom( ptrdx, ptrdy, ktrd, kt, Kmm ) 
    293296      !!--------------------------------------------------------------------- 
    294297      !!                  ***  ROUTINE trd_tra_iom  *** 
     
    300303      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index 
    301304      INTEGER                   , INTENT(in   ) ::   kt      ! time step 
     305      INTEGER                   , INTENT(in   ) ::   Kmm     ! time level index 
    302306      !! 
    303307      INTEGER ::   ji, jj, jk   ! dummy loop indices 
     
    326330                                  IF( ln_linssh ) THEN                   ! cst volume : adv flux through z=0 surface 
    327331                                     ALLOCATE( z2dx(jpi,jpj), z2dy(jpi,jpj) ) 
    328                                      z2dx(:,:) = wn(:,:,1) * tsn(:,:,1,jp_tem) / e3t_n(:,:,1) 
    329                                      z2dy(:,:) = wn(:,:,1) * tsn(:,:,1,jp_sal) / e3t_n(:,:,1) 
     332                                     z2dx(:,:) = ww(:,:,1) * ts(:,:,1,jp_tem,Kmm) / e3t(:,:,1,Kmm) 
     333                                     z2dy(:,:) = ww(:,:,1) * ts(:,:,1,jp_sal,Kmm) / e3t(:,:,1,Kmm) 
    330334                                     CALL iom_put( "ttrd_sad", z2dx ) 
    331335                                     CALL iom_put( "strd_sad", z2dy ) 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdtrc.F90

    r10068 r13463  
    11MODULE trdtrc 
     2   USE par_kind 
    23   !!====================================================================== 
    34   !!                       ***  MODULE trdtrc  *** 
     
    910CONTAINS 
    1011 
    11    SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt ) 
     12   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt, Kmm ) 
    1213      INTEGER ::   kt, kjn, ktrd    
    13       REAL    ::   ptrtrd(:,:,:)   
     14      INTEGER ::   Kmm            ! time level index 
     15      REAL(wp)::   ptrtrd(:,:,:)   
    1416      WRITE(*,*) 'trd_trc : You should not have seen this print! error?', ptrtrd(1,1,1) 
    1517      WRITE(*,*) '  "      "      : You should not have seen this print! error?', kjn, ktrd, kt 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRD/trdvor.F90

    r10425 r13463  
    4646   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avr      ! average 
    4747   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrb     ! before vorticity (kt-1) 
    48    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrbb    ! vorticity at begining of the nwrite-1 timestep averaging period 
     48   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrbb    ! vorticity at begining of the nn_write-1 timestep averaging period 
    4949   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrbn    ! after vorticity at time step after the 
    50    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   rotot        ! begining of the NWRITE-1 timesteps 
     50   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   rotot        ! begining of the NN_WRITE-1 timesteps 
    5151   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrtot   ! 
    5252   REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   vor_avrres   ! 
     
    5656 
    5757   !! * Substitutions 
    58 #  include "vectopt_loop_substitute.h90" 
     58#  include "do_loop_substitute.h90" 
     59#  include "domzgr_substitute.h90" 
    5960   !!---------------------------------------------------------------------- 
    6061   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    7879 
    7980 
    80    SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt ) 
     81   SUBROUTINE trd_vor( putrd, pvtrd, ktrd, kt, Kmm ) 
    8182      !!---------------------------------------------------------------------- 
    8283      !!                  ***  ROUTINE trd_vor  *** 
     
    8889      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index 
    8990      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     91      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    9092      ! 
    9193      INTEGER ::   ji, jj   ! dummy loop indices 
     
    9496 
    9597      SELECT CASE( ktrd )  
    96       CASE( jpdyn_hpg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_prg )   ! Hydrostatique Pressure Gradient  
    97       CASE( jpdyn_keg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_keg )   ! KE Gradient  
    98       CASE( jpdyn_rvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo )   ! Relative Vorticity  
    99       CASE( jpdyn_pvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo )   ! Planetary Vorticity Term  
    100       CASE( jpdyn_ldf )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf )   ! Horizontal Diffusion  
    101       CASE( jpdyn_zad )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_zad )   ! Vertical Advection  
    102       CASE( jpdyn_spg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_spg )   ! Surface Pressure Grad.  
     98      CASE( jpdyn_hpg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_prg, Kmm )   ! Hydrostatique Pressure Gradient  
     99      CASE( jpdyn_keg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_keg, Kmm )   ! KE Gradient  
     100      CASE( jpdyn_rvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_rvo, Kmm )   ! Relative Vorticity  
     101      CASE( jpdyn_pvo )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_pvo, Kmm )   ! Planetary Vorticity Term  
     102      CASE( jpdyn_ldf )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_ldf, Kmm )   ! Horizontal Diffusion  
     103      CASE( jpdyn_zad )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_zad, Kmm )   ! Vertical Advection  
     104      CASE( jpdyn_spg )   ;   CALL trd_vor_zint( putrd, pvtrd, jpvor_spg, Kmm )   ! Surface Pressure Grad.  
    103105      CASE( jpdyn_zdf )                                                      ! Vertical Diffusion  
    104106         ztswu(:,:) = 0.e0   ;   ztswv(:,:) = 0.e0 
    105          DO jj = 2, jpjm1                                                             ! wind stress trends 
    106             DO ji = fs_2, fs_jpim1   ! vector opt. 
    107                ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u_n(ji,jj,1) * rau0 ) 
    108                ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v_n(ji,jj,1) * rau0 ) 
    109             END DO 
    110          END DO 
    111          ! 
    112          CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf )                             ! zdf trend including surf./bot. stresses  
    113          CALL trd_vor_zint( ztswu, ztswv, jpvor_swf )                             ! surface wind stress  
     107         DO_2D( 0, 0, 0, 0 ) 
     108            ztswu(ji,jj) = 0.5 * ( utau_b(ji,jj) + utau(ji,jj) ) / ( e3u(ji,jj,1,Kmm) * rho0 ) 
     109            ztswv(ji,jj) = 0.5 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / ( e3v(ji,jj,1,Kmm) * rho0 ) 
     110         END_2D 
     111         ! 
     112         CALL trd_vor_zint( putrd, pvtrd, jpvor_zdf, Kmm )                             ! zdf trend including surf./bot. stresses  
     113         CALL trd_vor_zint( ztswu, ztswv, jpvor_swf, Kmm )                             ! surface wind stress  
    114114      CASE( jpdyn_bfr ) 
    115          CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr )                             ! Bottom stress 
     115         CALL trd_vor_zint( putrd, pvtrd, jpvor_bfr, Kmm )                             ! Bottom stress 
    116116         ! 
    117117      CASE( jpdyn_atf )       ! last trends: perform the output of 2D vorticity trends 
    118          CALL trd_vor_iom( kt ) 
     118         CALL trd_vor_iom( kt, Kmm ) 
    119119      END SELECT 
    120120      ! 
     
    122122 
    123123 
    124    SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd ) 
     124   SUBROUTINE trd_vor_zint_2d( putrdvor, pvtrdvor, ktrd, Kmm ) 
    125125      !!---------------------------------------------------------------------------- 
    126126      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    129129      !!              from ocean surface down to control surface (NetCDF output) 
    130130      !! 
    131       !! ** Method/usage :   integration done over nwrite-1 time steps 
     131      !! ** Method/usage :   integration done over nn_write-1 time steps 
    132132      !! 
    133133      !! ** Action :   trends : 
     
    143143      !!                  vortrd (,,10) = forcing term 
    144144      !!                  vortrd (,,11) = bottom friction term 
    145       !!                  rotot(,) : total cumulative trends over nwrite-1 time steps 
     145      !!                  rotot(,) : total cumulative trends over nn_write-1 time steps 
    146146      !!                  vor_avrtot(,) : first membre of vrticity equation 
    147147      !!                  vor_avrres(,) : residual = dh/dt entrainment 
     
    150150      !!---------------------------------------------------------------------- 
    151151      INTEGER                     , INTENT(in   ) ::   ktrd       ! ocean trend index 
     152      INTEGER                     , INTENT(in   ) ::   Kmm        ! time level index 
    152153      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    153154      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    161162 
    162163      zudpvor(:,:) = 0._wp                 ;   zvdpvor(:,:) = 0._wp                    ! Initialisation 
    163       CALL lbc_lnk_multi( 'trdvor', putrdvor, 'U', -1. , pvtrdvor, 'V', -1. )      ! lateral boundary condition 
     164      CALL lbc_lnk_multi( 'trdvor', putrdvor, 'U', -1.0_wp , pvtrdvor, 'V', -1.0_wp )      ! lateral boundary condition 
    164165       
    165166 
     
    171172      ! 
    172173      CASE( jpvor_bfr )        ! bottom friction 
    173          DO jj = 2, jpjm1 
    174             DO ji = fs_2, fs_jpim1  
    175                ikbu = mbkv(ji,jj) 
    176                ikbv = mbkv(ji,jj)             
    177                zudpvor(ji,jj) = putrdvor(ji,jj) * e3u_n(ji,jj,ikbu) * e1u(ji,jj) * umask(ji,jj,ikbu) 
    178                zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v_n(ji,jj,ikbv) * e2v(ji,jj) * vmask(ji,jj,ikbv) 
    179             END DO 
    180          END DO 
     174         DO_2D( 0, 0, 0, 0 ) 
     175            ikbu = mbkv(ji,jj) 
     176            ikbv = mbkv(ji,jj)             
     177            zudpvor(ji,jj) = putrdvor(ji,jj) * e3u(ji,jj,ikbu,Kmm) * e1u(ji,jj) * umask(ji,jj,ikbu) 
     178            zvdpvor(ji,jj) = pvtrdvor(ji,jj) * e3v(ji,jj,ikbv,Kmm) * e2v(ji,jj) * vmask(ji,jj,ikbv) 
     179         END_2D 
    181180         ! 
    182181      CASE( jpvor_swf )        ! wind stress 
    183          zudpvor(:,:) = putrdvor(:,:) * e3u_n(:,:,1) * e1u(:,:) * umask(:,:,1) 
    184          zvdpvor(:,:) = pvtrdvor(:,:) * e3v_n(:,:,1) * e2v(:,:) * vmask(:,:,1) 
     182         zudpvor(:,:) = putrdvor(:,:) * e3u(:,:,1,Kmm) * e1u(:,:) * umask(:,:,1) 
     183         zvdpvor(:,:) = pvtrdvor(:,:) * e3v(:,:,1,Kmm) * e2v(:,:) * vmask(:,:,1) 
    185184         ! 
    186185      END SELECT 
    187186 
    188187      ! Average except for Beta.V 
    189       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    190       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     188      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     189      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    191190    
    192191      ! Curl 
     
    194193         DO jj = 1, jpjm1 
    195194            vortrd(ji,jj,ktrd) = (    zvdpvor(ji+1,jj) - zvdpvor(ji,jj)       & 
    196                  &                - ( zudpvor(ji,jj+1) - zudpvor(ji,jj) )   ) / ( e1f(ji,jj) * e2f(ji,jj) ) 
     195                 &                - ( zudpvor(ji,jj+1) - zudpvor(ji,jj) )   ) & 
     196                 &                  / ( e1f(ji,jj) * e2f(ji,jj) ) 
    197197         END DO 
    198198      END DO 
     
    207207 
    208208 
    209    SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd ) 
     209   SUBROUTINE trd_vor_zint_3d( putrdvor, pvtrdvor, ktrd , Kmm ) 
    210210      !!---------------------------------------------------------------------------- 
    211211      !!                  ***  ROUTINE trd_vor_zint  *** 
     
    214214      !!              from ocean surface down to control surface (NetCDF output) 
    215215      !! 
    216       !! ** Method/usage :   integration done over nwrite-1 time steps 
     216      !! ** Method/usage :   integration done over nn_write-1 time steps 
    217217      !! 
    218218      !! ** Action :     trends : 
     
    228228      !!                  vortrd (,,10) = forcing term 
    229229      !!      vortrd (,,11) = bottom friction term 
    230       !!                  rotot(,) : total cumulative trends over nwrite-1 time steps 
     230      !!                  rotot(,) : total cumulative trends over nn_write-1 time steps 
    231231      !!                  vor_avrtot(,) : first membre of vrticity equation 
    232232      !!                  vor_avrres(,) : residual = dh/dt entrainment 
     
    236236      ! 
    237237      INTEGER                         , INTENT(in   ) ::   ktrd       ! ocean trend index 
     238      INTEGER                         , INTENT(in   ) ::   Kmm        ! time level index 
    238239      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   putrdvor   ! u vorticity trend  
    239240      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pvtrdvor   ! v vorticity trend 
     
    250251      zvdpvor(:,:) = 0._wp 
    251252      !                            ! lateral boundary condition on input momentum trends 
    252       CALL lbc_lnk_multi( 'trdvor', putrdvor, 'U', -1. , pvtrdvor, 'V', -1. ) 
     253      CALL lbc_lnk_multi( 'trdvor', putrdvor, 'U', -1.0_wp , pvtrdvor, 'V', -1.0_wp ) 
    253254 
    254255      !  ===================================== 
     
    257258      ! putrdvor and pvtrdvor terms 
    258259      DO jk = 1,jpk 
    259         zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u_n(:,:,jk) * e1u(:,:) * umask(:,:,jk) 
    260         zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v_n(:,:,jk) * e2v(:,:) * vmask(:,:,jk) 
     260        zudpvor(:,:) = zudpvor(:,:) + putrdvor(:,:,jk) * e3u(:,:,jk,Kmm) * e1u(:,:) * umask(:,:,jk) 
     261        zvdpvor(:,:) = zvdpvor(:,:) + pvtrdvor(:,:,jk) * e3v(:,:,jk,Kmm) * e2v(:,:) * vmask(:,:,jk) 
    261262      END DO 
    262263 
     
    269270            DO jj = 1, jpjm1 
    270271               vortrd(ji,jj,jpvor_bev) = (    zvbet(ji+1,jj) - zvbet(ji,jj)     & 
    271                   &                       - ( zubet(ji,jj+1) - zubet(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) 
     272                  &                       - ( zubet(ji,jj+1) - zubet(ji,jj) ) ) & 
     273                  &                           / ( e1f(ji,jj) * e2f(ji,jj) ) 
    272274            END DO 
    273275         END DO 
    274276         ! Average of the Curl and Surface mask 
    275          vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu_n(:,:) * fmask(:,:,1) 
     277         vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu(:,:,Kmm) * fmask(:,:,1) 
    276278      ENDIF 
    277279      ! 
    278280      ! Average  
    279       zudpvor(:,:) = zudpvor(:,:) * r1_hu_n(:,:) 
    280       zvdpvor(:,:) = zvdpvor(:,:) * r1_hv_n(:,:) 
     281      zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 
     282      zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 
    281283      ! 
    282284      ! Curl 
     
    284286         DO jj=1,jpjm1 
    285287            vortrd(ji,jj,ktrd) = (    zvdpvor(ji+1,jj) - zvdpvor(ji,jj)     & 
    286                &                  - ( zudpvor(ji,jj+1) - zudpvor(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) 
     288               &                  - ( zudpvor(ji,jj+1) - zudpvor(ji,jj) ) ) & 
     289               &                         / ( e1f(ji,jj) * e2f(ji,jj) ) 
    287290         END DO 
    288291      END DO 
     
    298301 
    299302 
    300    SUBROUTINE trd_vor_iom( kt ) 
     303   SUBROUTINE trd_vor_iom( kt , Kmm ) 
    301304      !!---------------------------------------------------------------------- 
    302305      !!                  ***  ROUTINE trd_vor  *** 
     
    306309      !!---------------------------------------------------------------------- 
    307310      INTEGER                   , INTENT(in   ) ::   kt             ! time step 
     311      INTEGER                   , INTENT(in   ) ::   Kmm            ! time level index 
    308312      ! 
    309313      INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    310314      INTEGER  ::   it, itmod        ! local integers 
    311315      REAL(wp) ::   zmean            ! local scalars 
    312       REAL(wp), DIMENSION(jpi,jpj) :: zun, zvn 
     316      REAL(wp), DIMENSION(jpi,jpj) :: zuu, zvv 
    313317      !!---------------------------------------------------------------------- 
    314318 
     
    327331 
    328332      vor_avr   (:,:) = 0._wp 
    329       zun       (:,:) = 0._wp 
    330       zvn       (:,:) = 0._wp 
     333      zuu       (:,:) = 0._wp 
     334      zvv       (:,:) = 0._wp 
    331335      vor_avrtot(:,:) = 0._wp 
    332336      vor_avrres(:,:) = 0._wp 
     
    334338      ! Vertically averaged velocity 
    335339      DO jk = 1, jpk - 1 
    336          zun(:,:) = zun(:,:) + e1u(:,:) * un(:,:,jk) * e3u_n(:,:,jk) 
    337          zvn(:,:) = zvn(:,:) + e2v(:,:) * vn(:,:,jk) * e3v_n(:,:,jk) 
     340         zuu(:,:) = zuu(:,:) + e1u(:,:) * uu(:,:,jk,Kmm) * e3u(:,:,jk,Kmm) 
     341         zvv(:,:) = zvv(:,:) + e2v(:,:) * vv(:,:,jk,Kmm) * e3v(:,:,jk,Kmm) 
    338342      END DO 
    339343  
    340       zun(:,:) = zun(:,:) * r1_hu_n(:,:) 
    341       zvn(:,:) = zvn(:,:) * r1_hv_n(:,:) 
     344      zuu(:,:) = zuu(:,:) * r1_hu(:,:,Kmm) 
     345      zvv(:,:) = zvv(:,:) * r1_hv(:,:,Kmm) 
    342346 
    343347      ! Curl 
    344348      DO ji = 1, jpim1 
    345349         DO jj = 1, jpjm1 
    346             vor_avr(ji,jj) = (  ( zvn(ji+1,jj) - zvn(ji,jj) )    & 
    347                &              - ( zun(ji,jj+1) - zun(ji,jj) ) ) / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 
     350            vor_avr(ji,jj) = (  ( zvv(ji+1,jj) - zvv(ji,jj) )    & 
     351               &              - ( zuu(ji,jj+1) - zuu(ji,jj) ) )  & 
     352               &             / ( e1f(ji,jj) * e2f(ji,jj) ) * fmask(ji,jj,1) 
    348353         END DO 
    349354      END DO 
     
    360365      ENDIF 
    361366 
    362       ! II.2 cumulated trends over analysis period (kt=2 to nwrite) 
     367      ! II.2 cumulated trends over analysis period (kt=2 to nn_write) 
    363368      ! ---------------------- 
    364       ! trends cumulated over nwrite-2 time steps 
     369      ! trends cumulated over nn_write-2 time steps 
    365370 
    366371      IF( kt >= nit000+2 ) THEN 
     
    376381      !   III. Output in netCDF + residual computation 
    377382      !  ============================================= 
    378  
     383       
    379384      ! define time axis 
    380385      it    = kt 
     
    385390         ! III.1 compute total trend 
    386391         ! ------------------------ 
    387          zmean = 1._wp / (  REAL( nmoydpvor, wp ) * 2._wp * rdt  ) 
     392         zmean = 1._wp / (  REAL( nmoydpvor, wp ) * 2._wp * rn_Dt  ) 
    388393         vor_avrtot(:,:) = (  vor_avr(:,:) - vor_avrbn(:,:) + vor_avrb(:,:) - vor_avrbb(:,:) ) * zmean 
    389394 
     
    395400 
    396401         ! Boundary conditions 
    397          CALL lbc_lnk_multi( 'trdvor', vor_avrtot, 'F', 1. , vor_avrres, 'F', 1. ) 
     402         CALL lbc_lnk_multi( 'trdvor', vor_avrtot, 'F', 1.0_wp , vor_avrres, 'F', 1.0_wp ) 
    398403 
    399404 
     
    504509      ENDIF 
    505510#if defined key_diainstant 
    506       zsto = nwrite*rdt 
     511      zsto = nn_write*rn_Dt 
    507512      clop = "inst("//TRIM(clop)//")" 
    508513#else 
    509       zsto = rdt 
     514      zsto = rn_Dt 
    510515      clop = "ave("//TRIM(clop)//")" 
    511516#endif 
    512       zout = nn_trd*rdt 
     517      zout = nn_trd*rn_Dt 
    513518 
    514519      IF(lwp) WRITE(numout,*) '               netCDF initialization' 
     
    516521      ! II.2 Compute julian date from starting date of the run 
    517522      ! ------------------------ 
    518       CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian ) 
     523      CALL ymds2ju( nyear, nmonth, nday, rn_Dt, zjulian ) 
    519524      zjulian = zjulian - adatrj   !   set calendar origin to the beginning of the experiment 
    520525      IF(lwp) WRITE(numout,*)' '   
     
    528533      IF(lwp) WRITE(numout,*) ' Name of NETCDF file ', clhstnam 
    529534      CALL histbeg( clhstnam, jpi, glamf, jpj, gphif,1, jpi,   &  ! Horizontal grid : glamt and gphit 
    530          &          1, jpj, nit000-1, zjulian, rdt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set ) 
     535         &          1, jpj, nit000-1, zjulian, rn_Dt, nh_t, nidvor, domain_id=nidom, snc4chunks=snc4set ) 
    531536      CALL wheneq( jpi*jpj, fmask, 1, 1., ndexvor1, ndimvor1 )    ! surface 
    532537 
Note: See TracChangeset for help on using the changeset viewer.