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 1546 for trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90 – NEMO

Ignore:
Timestamp:
2009-07-27T15:39:29+02:00 (15 years ago)
Author:
ctlod
Message:

small optimisation, see ticket: #495

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r1537 r1546  
    8888      !!              Koch-Larrouy et al. 2007, GRL. 
    8989      !!---------------------------------------------------------------------- 
     90      USE oce,   zav_tide  =>   ua   ! use ua as workspace 
     91      !! 
    9092      INTEGER, INTENT(in) ::   kt   ! ocean time-step  
    9193      !! 
     
    98100      IF( kt == nit000  )   CALL zdf_tmx_init      ! Initialization (first time-step only) 
    99101 
    100       !                                        ! ----------------------- ! 
    101       !                                        !  Standard tidal mixing  !  (compute av_tide) 
    102       !                                        ! ----------------------- ! 
     102      !                          ! ----------------------- ! 
     103      !                          !  Standard tidal mixing  !  (compute zav_tide) 
     104      !                          ! ----------------------- ! 
    103105      !                             !* First estimation (with n2 bound by rn_n2min) bounded by 60 cm2/s 
    104       av_tide(:,:,:) = MIN(  60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) )  ) 
     106      zav_tide(:,:,:) = MIN(  60.e-4, az_tmx(:,:,:) / MAX( rn_n2min, rn2(:,:,:) )  ) 
    105107 
    106108      zkz(:,:) = 0.e0               !* Associated potential energy consummed over the whole water column 
    107109      DO jk = 2, jpkm1 
    108          zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * av_tide(:,:,jk)* tmask(:,:,jk) 
     110         zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk)* tmask(:,:,jk) 
    109111      END DO 
    110112 
     
    115117      END DO 
    116118 
    117       DO jk = 2, jpkm1              !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> av_tide bound by 300 cm2/s 
    118          av_tide(:,:,jk) = av_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
    119       END DO 
    120  
    121       IF( kt == nit000 ) THEN       !* check at first time-step: diagnose the energy consumed by av_tide 
     119      DO jk = 2, jpkm1              !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 
     120         zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
     121      END DO 
     122 
     123      IF( kt == nit000 ) THEN       !* check at first time-step: diagnose the energy consumed by zav_tide 
    122124         ztpc = 0.e0 
    123125         DO jk= 1, jpk 
     
    125127               DO ji= 1, jpi 
    126128                  ztpc = ztpc + fse3w(ji,jj,jk) * e1t(ji,jj) * e2t(ji,jj)   & 
    127                      &         * MAX( 0.e0, rn2(ji,jj,jk) ) * av_tide(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
     129                     &         * MAX( 0.e0, rn2(ji,jj,jk) ) * zav_tide(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    128130               END DO 
    129131            END DO 
     
    134136      ENDIF 
    135137        
    136       !                                        ! ----------------------- ! 
    137       IF( ln_tmx_itf )   CALL tmx_itf( kt )    !    ITF  tidal mixing    !  (update av_tide) 
    138       !                                        ! ----------------------- ! 
    139  
    140       !                                        ! ----------------------- ! 
    141       !                                        !   Update  mixing coefs  !                           
    142       !                                        ! ----------------------- ! 
     138      !                          ! ----------------------- ! 
     139      !                          !    ITF  tidal mixing    !  (update zav_tide) 
     140      !                          ! ----------------------- ! 
     141      IF( ln_tmx_itf )   CALL tmx_itf( kt, zav_tide ) 
     142 
     143      !                          ! ----------------------- ! 
     144      !                          !   Update  mixing coefs  !                           
     145      !                          ! ----------------------- ! 
    143146      DO jk = 2, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    144          avt(:,:,jk) = avt(:,:,jk) + av_tide(:,:,jk) 
    145          avm(:,:,jk) = avm(:,:,jk) + av_tide(:,:,jk) 
     147         avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) 
     148         avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) 
    146149         DO jj = 2, jpjm1 
    147150            DO ji = fs_2, fs_jpim1  ! vector opt. 
    148                avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( av_tide(ji,jj,jk) + av_tide(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
    149                avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( av_tide(ji,jj,jk) + av_tide(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
     151               avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
     152               avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
    150153            END DO 
    151154         END DO 
     
    153156      CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )      ! lateral boundary condition 
    154157 
    155       IF(ln_ctl)   CALL prt_ctl(tab3d_1=av_tide ,clinfo1=' tmx - av_tide: ',tab3d_2=avt,clinfo2=' avt: ',ovlap=1,kdim=jpk) 
     158      !                             !* output tidal mixing coefficient 
     159      CALL iom_put( "av_tide", zav_tide ) 
     160 
     161      IF(ln_ctl)   CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 
    156162      ! 
    157163   END SUBROUTINE zdf_tmx 
    158164 
    159165 
    160    SUBROUTINE tmx_itf( kt ) 
     166   SUBROUTINE tmx_itf( kt, pav ) 
    161167      !!---------------------------------------------------------------------- 
    162168      !!                  ***  ROUTINE tmx_itf  *** 
    163169      !!                    
    164170      !! ** Purpose :   modify the vertical eddy diffusivity coefficients  
    165       !!              (av_tide) in the Indonesian Through Flow area (ITF). 
     171      !!              (pav) in the Indonesian Through Flow area (ITF). 
    166172      !! 
    167173      !! ** Method  : - Following Koch-Larrouy et al. (2007), in the ITF defined 
     
    178184      !! References :  Koch-Larrouy et al. 2007, GRL  
    179185      !!---------------------------------------------------------------------- 
    180       INTEGER, INTENT(in) ::   kt   ! ocean time-step 
     186      INTEGER , INTENT(in   )                         ::   kt   ! ocean time-step 
     187      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pav  ! Tidal mixing coef. 
    181188      !!  
    182189      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
     
    267274      ENDIF 
    268275 
    269       !                             ! Update av_tide with the ITF mixing coefficient 
     276      !                             ! Update pav with the ITF mixing coefficient 
    270277      DO jk = 2, jpkm1 
    271          av_tide(:,:,jk) = av_tide (:,:,jk) * ( 1.e0 - mask_itf(:,:) )   & 
    272             &            + zavt_itf(:,:,jk) *          mask_itf(:,:)  
     278         pav(:,:,jk) = pav    (:,:,jk) * ( 1.e0 - mask_itf(:,:) )   & 
     279            &        + zavt_itf(:,:,jk) *          mask_itf(:,:)  
    273280      END DO 
    274281      ! 
     
    311318      !!              Koch-Larrouy et al. 2007, GRL. 
    312319      !!---------------------------------------------------------------------- 
     320      USE oce,   zav_tide  =>   ua   ! use ua as workspace 
     321      !! 
    313322      INTEGER ::   ji, jj, jk    ! dummy loop indices 
    314323      INTEGER ::   inum          ! temporary logical unit 
     
    379388         ! Control print 
    380389         ! Total power consumption due to vertical mixing 
    381          ! zpc = rau0 * 1/rn_me * rn2 * av_tide 
    382          av_tide(:,:,:) = 0.e0 
     390         ! zpc = rau0 * 1/rn_me * rn2 * zav_tide 
     391         zav_tide(:,:,:) = 0.e0 
    383392         DO jk = 2, jpkm1 
    384             av_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 
     393            zav_tide(:,:,jk) = az_tmx(:,:,jk) / MAX( rn_n2min, rn2(:,:,jk) ) 
    385394         END DO 
    386395 
    387396         ztpc = 0.e0 
    388          zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * av_tide(:,:,:) 
     397         zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 
    389398         DO jk= 2, jpkm1 
    390399            DO jj = 1, jpj 
     
    401410 
    402411         ! control print 2 
    403          av_tide(:,:,:) = MIN( av_tide(:,:,:), 60.e-4 )    
     412         zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 )    
    404413         zkz(:,:) = 0.e0 
    405414         DO jk = 2, jpkm1 
    406415         DO jj = 1, jpj 
    407416            DO ji = 1, jpi 
    408                zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * av_tide(ji,jj,jk)* tmask(ji,jj,jk) 
     417               zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zav_tide(ji,jj,jk)* tmask(ji,jj,jk) 
    409418            END DO 
    410419         END DO 
     
    429438 
    430439         DO jk = 2, jpkm1 
    431             av_tide(:,:,jk) = av_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
     440            zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
    432441         END DO 
    433442         ztpc = 0.e0 
    434          zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * av_tide(:,:,:) 
     443         zpc(:,:,:) = Max(0.e0,rn2(:,:,:)) * zav_tide(:,:,:) 
    435444         DO jk= 1, jpk 
    436445            DO jj = 1, jpj 
     
    444453 
    445454         DO jk = 1, jpk 
    446             ze_z =                  SUM( e1t(:,:) * e2t(:,:) * av_tide(:,:,jk)     * tmask_i(:,:) )   & 
     455            ze_z =                  SUM( e1t(:,:) * e2t(:,:) * zav_tide(:,:,jk)     * tmask_i(:,:) )   & 
    447456               &     / MAX( 1.e-20, SUM( e1t(:,:) * e2t(:,:) * tmask (:,:,jk) * tmask_i(:,:) ) ) 
    448457            ztpc = 1.E50 
    449458            DO jj = 1, jpj 
    450459               DO ji = 1, jpi 
    451                   IF( av_tide(ji,jj,jk) /= 0.e0 )   ztpc =Min( ztpc, av_tide(ji,jj,jk) ) 
     460                  IF( zav_tide(ji,jj,jk) /= 0.e0 )   ztpc =Min( ztpc, zav_tide(ji,jj,jk) ) 
    452461               END DO 
    453462            END DO 
    454463            WRITE(numout,*) '            N2 min - jk= ', jk,'   ', ze_z * 1.e4,' cm2/s min= ',ztpc*1.e4,   & 
    455                &       'max= ', MAXVAL(av_tide(:,:,jk) )*1.e4, ' cm2/s' 
     464               &       'max= ', MAXVAL(zav_tide(:,:,jk) )*1.e4, ' cm2/s' 
    456465         END DO 
    457466 
Note: See TracChangeset for help on using the changeset viewer.