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 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/DYN/dynkeg.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

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

    r2528 r2715  
    1414   USE oce             ! ocean dynamics and tracers 
    1515   USE dom_oce         ! ocean space and time domain 
    16    USE in_out_manager  ! I/O manager 
    1716   USE trdmod          ! ocean dynamics trends  
    1817   USE trdmod_oce      ! ocean variables trends 
     18   USE in_out_manager  ! I/O manager 
     19   USE lib_mpp         ! MPP library 
    1920   USE prtctl          ! Print control 
    2021 
     
    2930   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3031   !! $Id$  
    31    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     32   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3233   !!---------------------------------------------------------------------- 
    33  
    3434CONTAINS 
    3535 
     
    5252      !!             - save this trends (l_trddyn=T) for post-processing 
    5353      !!---------------------------------------------------------------------- 
    54       USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace    
    55       USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace    
     54      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     55      USE oce     , ONLY:   ztrdu => ta       , ztrdv => sa   ! (ta,sa) used as 3D workspace    
     56      USE wrk_nemo, ONLY:   zhke  => wrk_3d_1                 ! 3D workspace 
    5657      !! 
    5758      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    5960      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    6061      REAL(wp) ::   zu, zv       ! temporary scalars 
    61       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zhke   ! temporary 3D workspace 
    6262      !!---------------------------------------------------------------------- 
     63 
     64      IF( wrk_in_use(3,1) ) THEN 
     65         CALL ctl_stop('dyn_key: requested workspace array is unavailable')   ;   RETURN 
     66      ENDIF 
    6367 
    6468      IF( kt == nit000 ) THEN 
     
    8387                  &         + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)  ) 
    8488               zhke(ji,jj,jk) = zv + zu 
     89!!gm simplier coding  ==>>   ~ faster 
     90!    don't forget to suppress local zu zv scalars 
     91!               zhke(ji,jj,jk) = 0.25 * (   un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     92!                  &                      + un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)   & 
     93!                  &                      + vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
     94!                  &                      + vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)   ) 
     95!!gm end <<== 
    8596            END DO   
    8697         END DO   
     
    91102            END DO  
    92103         END DO 
     104!!gm idea to be tested  ==>>   is it faster on scalar computers ? 
     105!         DO jj = 2, jpjm1       ! add the gradient of kinetic energy to the general momentum trends 
     106!            DO ji = fs_2, fs_jpim1   ! vector opt. 
     107!               ua(ji,jj,jk) = ua(ji,jj,jk) - 0.25 * ( + un(ji+1,jj  ,jk) * un(ji+1,jj  ,jk)   & 
     108!                  &                                   + vn(ji+1,jj-1,jk) * vn(ji+1,jj-1,jk)   & 
     109!                  &                                   + vn(ji+1,jj  ,jk) * vn(ji+1,jj  ,jk)   & 
     110!                  ! 
     111!                  &                                   - un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     112!                  &                                   - vn(ji  ,jj-1,jk) * vn(ji  ,jj-1,jk)   & 
     113!                  &                                   - vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)   ) / e1u(ji,jj) 
     114!                  ! 
     115!               va(ji,jj,jk) = va(ji,jj,jk) - 0.25 * (   un(ji-1,jj+1,jk) * un(ji-1,jj+1,jk)   & 
     116!                  &                                   + un(ji  ,jj+1,jk) * un(ji  ,jj+1,jk)   & 
     117!                  &                                   + vn(ji  ,jj+1,jk) * vn(ji  ,jj+1,jk)   & 
     118!                  ! 
     119!                  &                                   - un(ji-1,jj  ,jk) * un(ji-1,jj  ,jk)   & 
     120!                  &                                   - un(ji  ,jj  ,jk) * un(ji  ,jj  ,jk)   & 
     121!                  &                                   - vn(ji  ,jj  ,jk) * vn(ji  ,jj  ,jk)   ) / e2v(ji,jj) 
     122!            END DO  
     123!         END DO 
     124!!gm en idea            <<== 
    93125         !                                             ! =============== 
    94126      END DO                                           !   End of slab 
     
    104136         &                       tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    105137      ! 
     138      IF( wrk_not_released(3, 1) )   CALL ctl_stop('dyn_key: failed to release workspace array') 
     139      ! 
    106140   END SUBROUTINE dyn_keg 
    107141 
Note: See TracChangeset for help on using the changeset viewer.