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 5323 – NEMO

Changeset 5323


Ignore:
Timestamp:
2015-06-01T09:59:54+02:00 (9 years ago)
Author:
pabouttier
Message:

Modification of zhke 3D-array in 2D-array in dynkeg.F90 for performances purpose

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90

    r5321 r5323  
    77   !!            7.0  !  1997-05  (G. Madec)  Split dynber into dynkeg and dynhpg 
    88   !!  NEMO      1.0  !  2002-07  (G. Madec)  F90: Free form and module 
    9    !!            3.6  !  2015-05  (N. Ducousso, G. Madec)  add Hollingsworth scheme as an option  
     9   !!            3.6  !  2015-05  (N. Ducousso, G. Madec)  add Hollingsworth scheme as an option 
    1010   !!---------------------------------------------------------------------- 
    11     
     11 
    1212   !!---------------------------------------------------------------------- 
    1313   !!   dyn_keg      : update the momentum trend with the horizontal tke 
     
    2929 
    3030   PUBLIC   dyn_keg    ! routine called by step module 
    31     
     31 
    3232   INTEGER, PARAMETER, PUBLIC  ::   nkeg_C2  = 0   !: 2nd order centered scheme (standard scheme) 
    3333   INTEGER, PARAMETER, PUBLIC  ::   nkeg_HW  = 1   !: Hollingsworth et al., QJRMS, 1983 
    3434   ! 
    3535   REAL(wp) ::   r1_48 = 1._wp / 48._wp   !: =1/(4*2*6) 
    36     
     36 
    3737   !! * Substitutions 
    3838#  include "vectopt_loop_substitute.h90" 
    3939   !!---------------------------------------------------------------------- 
    4040   !! NEMO/OPA 3.6 , NEMO Consortium (2015) 
    41    !! $Id$  
     41   !! $Id$ 
    4242   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    4343   !!---------------------------------------------------------------------- 
     
    4949      !! 
    5050      !! ** Purpose :   Compute the now momentum trend due to the horizontal 
    51       !!      gradient of the horizontal kinetic energy and add it to the  
     51      !!      gradient of the horizontal kinetic energy and add it to the 
    5252      !!      general momentum trend. 
    5353      !! 
    54       !! ** Method  : * kscheme = nkeg_C2 : 2nd order centered scheme that  
    55       !!      conserve kinetic energy. Compute the now horizontal kinetic energy  
     54      !! ** Method  : * kscheme = nkeg_C2 : 2nd order centered scheme that 
     55      !!      conserve kinetic energy. Compute the now horizontal kinetic energy 
    5656      !!         zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ] 
    5757      !!              * kscheme = nkeg_HW : Hollingsworth correction following 
     
    5959      !!         zhke = 1/6 [ mi-1(  2 * un^2 + ((un(j+1)+un(j-1))/2)^2  ) 
    6060      !!                    + mj-1(  2 * vn^2 + ((vn(i+1)+vn(i-1))/2)^2  ) ] 
    61       !!       
     61      !! 
    6262      !!      Take its horizontal gradient and add it to the general momentum 
    6363      !!      trend (ua,va). 
     
    7272      !!---------------------------------------------------------------------- 
    7373      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index 
    74       INTEGER, INTENT( in ) ::   kscheme   ! =0/1   type of KEG scheme  
     74      INTEGER, INTENT( in ) ::   kscheme   ! =0/1   type of KEG scheme 
    7575      ! 
    7676      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    7777      REAL(wp) ::   zu, zv       ! temporary scalars 
    78       REAL(wp), POINTER, DIMENSION(:,:,:) :: zhke 
    79       REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdu, ztrdv  
     78      REAL(wp), POINTER, DIMENSION(:,: :: zhke 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdu, ztrdv 
    8080      !!---------------------------------------------------------------------- 
    8181      ! 
    8282      IF( nn_timing == 1 )   CALL timing_start('dyn_keg') 
    8383      ! 
    84       CALL wrk_alloc( jpi,jpj,jpk,   zhke ) 
     84      CALL wrk_alloc( jpi,jpj,   zhke ) 
    8585      ! 
    8686      IF( kt == nit000 ) THEN 
     
    9292      IF( l_trddyn ) THEN           ! Save ua and va trends 
    9393         CALL wrk_alloc( jpi,jpj,jpk,   ztrdu, ztrdv ) 
    94          ztrdu(:,:,:) = ua(:,:,:)  
    95          ztrdv(:,:,:) = va(:,:,:)  
     94         ztrdu(:,:,:) = ua(:,:,:) 
     95         ztrdv(:,:,:) = va(:,:,:) 
    9696      ENDIF 
    97        
    98       zhke(:,:,jpk) = 0._wp 
    99        
     97 
     98      zhke(:,:) = 0._wp 
     99 
    100100      SELECT CASE ( kscheme )             !== Horizontal kinetic energy at T-point  ==! 
    101101      ! 
     
    108108                  zv =    vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
    109109                     &  + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk) 
    110                   zhke(ji,jj,jk) = 0.25_wp * ( zv + zu ) 
    111                END DO   
     110                  zhke(ji,jj) = 0.25_wp * ( zv + zu ) 
     111               END DO 
    112112            END DO 
    113113         END DO 
     
    115115      CASE ( nkeg_HW )                          !--  Hollingsworth scheme  --! 
    116116         DO jk = 1, jpkm1 
    117             DO jj = 2, jpjm1        
     117            DO jj = 2, jpjm1 
    118118               DO ji = fs_2, jpim1   ! vector opt. 
    119119                  zu = 8._wp * ( un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)    & 
     
    126126                     &  +      ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) ) * ( vn(ji-1,jj-1,jk) + vn(ji+1,jj-1,jk) )   & 
    127127                     &  +      ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) * ( vn(ji-1,jj  ,jk) + vn(ji+1,jj  ,jk) ) 
    128                   zhke(ji,jj,jk) = r1_48 * ( zv + zu ) 
    129                END DO   
     128                  zhke(ji,jj) = r1_48 * ( zv + zu ) 
     129               END DO 
    130130            END DO 
    131131         END DO 
     
    137137         DO jj = 2, jpjm1 
    138138            DO ji = fs_2, fs_jpim1   ! vector opt. 
    139                ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj  ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 
    140                va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji  ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 
    141             END DO  
     139               ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj  ) - zhke(ji,jj) ) / e1u(ji,jj) 
     140               va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji  ,jj+1) - zhke(ji,jj) ) / e2v(ji,jj) 
     141            END DO 
    142142         END DO 
    143143      END DO 
     
    153153         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    154154      ! 
    155       CALL wrk_dealloc( jpi,jpj,jpk,   zhke ) 
     155      CALL wrk_dealloc( jpi,jpj,   zhke ) 
    156156      ! 
    157157      IF( nn_timing == 1 )   CALL timing_stop('dyn_keg') 
Note: See TracChangeset for help on using the changeset viewer.