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/dynvor.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/dynvor.F90

    r2528 r2715  
    55   !!                 planetary vorticity trends 
    66   !!====================================================================== 
    7    !! History :  OPA  !  1989-12  (P. Andrich)  vor_ens: Original code 
    8    !!            5.0  !  1991-11  (G. Madec) vor_ene, vor_mix: Original code 
    9    !!            6.0  !  1996-01  (G. Madec)  s-coord, suppress work arrays 
    10    !!            8.5  ! 2002-08  (G. Madec)  F90: Free form and module 
    11    !!   NEMO     1.0  ! 2004-02  (G. Madec)  vor_een: Original code 
    12    !!             -   !  2003-08  (G. Madec)  add vor_ctl 
    13    !!             -   !  2005-11  (G. Madec)  add dyn_vor (new step architecture) 
    14    !!            2.0  !  2006-11  (G. Madec)  flux form advection: add metric term 
    15    !!            3.2  !  2009-04  (R. Benshila)  vvl: correction of een scheme 
    16    !!            3.3  !  2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase 
     7   !! History :  OPA  ! 1989-12  (P. Andrich)  vor_ens: Original code 
     8   !!            5.0  ! 1991-11  (G. Madec) vor_ene, vor_mix: Original code 
     9   !!            6.0  ! 1996-01  (G. Madec)  s-coord, suppress work arrays 
     10   !!   NEMO     0.5  ! 2002-08  (G. Madec)  F90: Free form and module 
     11   !!            1.0  ! 2004-02  (G. Madec)  vor_een: Original code 
     12   !!             -   ! 2003-08  (G. Madec)  add vor_ctl 
     13   !!             -   ! 2005-11  (G. Madec)  add dyn_vor (new step architecture) 
     14   !!            2.0  ! 2006-11  (G. Madec)  flux form advection: add metric term 
     15   !!            3.2  ! 2009-04  (R. Benshila)  vvl: correction of een scheme 
     16   !!            3.3  ! 2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase 
    1717   !!---------------------------------------------------------------------- 
    1818 
     
    3333   USE prtctl         ! Print control 
    3434   USE in_out_manager ! I/O manager 
     35   USE lib_mpp 
    3536 
    3637   IMPLICIT NONE 
     
    5758   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    5859   !! $Id$ 
    59    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     60   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    6061   !!---------------------------------------------------------------------- 
    61  
    6262CONTAINS 
    6363 
     
    7171      !!               and planetary vorticity trends) ('key_trddyn') 
    7272      !!---------------------------------------------------------------------- 
    73       USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
    74       USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
    75       !! 
     73      USE oce, ONLY:   ztrdu => ta , ztrdv => sa   ! (ta,sa) used as 3D workspace 
     74      ! 
    7675      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    7776      !!---------------------------------------------------------------------- 
    78  
     77      ! 
    7978      !                                          ! vorticity term  
    8079      SELECT CASE ( nvor )                       ! compute the vorticity trend and add it to the general trend 
     
    171170         ! 
    172171      END SELECT 
    173  
     172      ! 
    174173      !                       ! print sum trends (used for debugging) 
    175       IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor  - Ua: ', mask1=umask, & 
     174      IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' vor  - Ua: ', mask1=umask,               & 
    176175         &                     tab3d_2=va, clinfo2=       ' Va: ', mask2=vmask, clinfo3='dyn' ) 
    177176      ! 
     
    205204      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    206205      !!---------------------------------------------------------------------- 
     206      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     207      USE wrk_nemo, ONLY:   zwx => wrk_2d_1 , zwy => wrk_2d_2 , zwz => wrk_2d_3     ! 2D workspace 
     208      ! 
    207209      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    208210      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    210212      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    211213      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
    212       !! 
    213       INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    214       REAL(wp) ::   zx1, zy1, zfact2   ! temporary scalars 
    215       REAL(wp) ::   zx2, zy2           !    "         " 
    216       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 2D workspace 
    217       !!---------------------------------------------------------------------- 
     214      ! 
     215      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     216      REAL(wp) ::   zx1, zy1, zfact2, zx2, zy2   ! local scalars 
     217      !!---------------------------------------------------------------------- 
     218 
     219      IF( wrk_in_use(2, 1,2,3) ) THEN 
     220         CALL ctl_stop('dyn:vor_ene: requested workspace arrays unavailable')   ;   RETURN 
     221      ENDIF 
    218222 
    219223      IF( kt == nit000 ) THEN 
     
    280284      END DO                                           !   End of slab 
    281285      !                                                ! =============== 
     286      IF( wrk_not_released(2, 1,2,3) )   CALL ctl_stop('dyn:vor_ene: failed to release workspace arrays') 
     287      ! 
    282288   END SUBROUTINE vor_ene 
    283289 
     
    314320      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    315321      !!---------------------------------------------------------------------- 
     322      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     323      USE wrk_nemo, ONLY:   zwx => wrk_2d_4 , zwy => wrk_2d_5 , zwz => wrk_2d_6 , zww => wrk_2d_7   ! 2D workspace 
     324      ! 
    316325      INTEGER, INTENT(in) ::   kt   ! ocean timestep index 
    317       !! 
     326      ! 
    318327      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    319       REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! temporary scalars 
    320       REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !    "         " 
    321       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz, zww   ! temporary 3D workspace 
    322       !!---------------------------------------------------------------------- 
     328      REAL(wp) ::   zfact1, zua, zcua, zx1, zy1   ! local scalars 
     329      REAL(wp) ::   zfact2, zva, zcva, zx2, zy2   !   -      - 
     330      !!---------------------------------------------------------------------- 
     331 
     332      IF( wrk_in_use(2, 4,5,6,7) ) THEN 
     333         CALL ctl_stop('dyn:vor_mix: requested workspace arrays unavailable')   ;   RETURN 
     334      ENDIF 
    323335 
    324336      IF( kt == nit000 ) THEN 
     
    392404      END DO                                           !   End of slab 
    393405      !                                                ! =============== 
     406      IF( wrk_not_released(2, 4,5,6,7) )   CALL ctl_stop('dyn:vor_mix: failed to release workspace arrays') 
     407      ! 
    394408   END SUBROUTINE vor_mix 
    395409 
     
    421435      !! References : Sadourny, r., 1975, j. atmos. sciences, 32, 680-689. 
    422436      !!---------------------------------------------------------------------- 
     437      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     438      USE wrk_nemo, ONLY:   zwx => wrk_2d_4, zwy => wrk_2d_5, zwz => wrk_2d_6    ! 2D workspace 
     439      ! 
    423440      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    424441      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    426443      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pua    ! total u-trend 
    427444      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pva    ! total v-trend 
    428       !! 
     445      ! 
    429446      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    430447      REAL(wp) ::   zfact1, zuav, zvau   ! temporary scalars 
    431       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz   ! temporary 3D workspace 
    432448      !!---------------------------------------------------------------------- 
    433449       
     450      IF( wrk_in_use(2, 4,5,6) ) THEN 
     451         CALL ctl_stop('dyn:vor_ens: requested workspace arrays unavailable')   ;   RETURN 
     452      END IF 
     453 
    434454      IF( kt == nit000 ) THEN 
    435455         IF(lwp) WRITE(numout,*) 
     
    503523      END DO                                           !   End of slab 
    504524      !                                                ! =============== 
     525      IF( wrk_not_released(2, 4,5,6) )   CALL ctl_stop('dyn:vor_ens: failed to release workspace arrays') 
     526      ! 
    505527   END SUBROUTINE vor_ens 
    506528 
     
    525547      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    526548      !!---------------------------------------------------------------------- 
     549      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     550      USE wrk_nemo, ONLY:   zwx  => wrk_2d_1 , zwy  => wrk_2d_2 ,  zwz => wrk_2d_3     ! 2D workspace 
     551      USE wrk_nemo, ONLY:   ztnw => wrk_2d_4 , ztne => wrk_2d_5  
     552      USE wrk_nemo, ONLY:   ztsw => wrk_2d_6 , ztse => wrk_2d_7 
     553#if defined key_vvl 
     554      USE wrk_nemo, ONLY:   ze3f => wrk_3d_1                                           ! 3D workspace (lk_vvl=T) 
     555#endif 
     556      ! 
    527557      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    528558      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    532562      !! 
    533563      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    534       REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
    535       REAL(wp), DIMENSION(jpi,jpj) ::   zwx, zwy, zwz            ! temporary 2D workspace 
    536       REAL(wp), DIMENSION(jpi,jpj) ::   ztnw, ztne, ztsw, ztse   ! temporary 3D workspace 
    537 #if defined key_vvl 
    538       REAL(wp), DIMENSION(jpi,jpj,jpk)       ::   ze3f 
    539 #else 
    540       REAL(wp), DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
     564      INTEGER  ::   ierr               ! local integer 
     565      REAL(wp) ::   zfac12, zua, zva   ! local scalars 
     566#if ! defined key_vvl 
     567      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE ::   ze3f     ! lk_vvl=F, ze3f=1/e3f saved one for all 
    541568#endif 
    542569      !!---------------------------------------------------------------------- 
     570 
     571      IF( wrk_in_use(2, 1,2,3,4,5,6,7) .OR. wrk_in_use(3, 1) ) THEN 
     572         CALL ctl_stop('dyn:vor_een: requested workspace arrays unavailable')   ;   RETURN 
     573      ENDIF 
    543574 
    544575      IF( kt == nit000 ) THEN 
     
    546577         IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 
    547578         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     579         IF( .NOT.lk_vvl ) THEN 
     580            ALLOCATE( ze3f(jpi,jpj,jpk) , STAT=ierr ) 
     581            IF( lk_mpp    )   CALL mpp_sum ( ierr ) 
     582            IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dyn:vor_een : unable to allocate arrays' ) 
     583         ENDIF 
    548584      ENDIF 
    549585 
     
    554590                  ze3f(ji,jj,jk) = ( fse3t(ji,jj+1,jk)*tmask(ji,jj+1,jk) + fse3t(ji+1,jj+1,jk)*tmask(ji+1,jj+1,jk)   & 
    555591                     &             + fse3t(ji,jj  ,jk)*tmask(ji,jj  ,jk) + fse3t(ji+1,jj  ,jk)*tmask(ji+1,jj  ,jk) ) * 0.25 
    556                   IF( ze3f(ji,jj,jk) /= 0.e0 )   ze3f(ji,jj,jk) = 1.e0 / ze3f(ji,jj,jk) 
     592                  IF( ze3f(ji,jj,jk) /= 0._wp )   ze3f(ji,jj,jk) = 1._wp / ze3f(ji,jj,jk) 
    557593               END DO 
    558594            END DO 
     
    561597      ENDIF 
    562598 
    563       zfac12 = 1.e0 / 12.e0      ! Local constant initialization 
     599      zfac12 = 1._wp / 12._wp    ! Local constant initialization 
    564600 
    565601       
     
    634670      END DO                                           !   End of slab 
    635671      !                                                ! =============== 
     672      IF( wrk_not_released(2, 1,2,3,4,5,6,7) .OR.   & 
     673          wrk_not_released(3, 1)             )   CALL ctl_stop('dyn:vor_een: failed to release workspace arrays') 
     674      ! 
    636675   END SUBROUTINE vor_een 
    637676 
     
    644683      !!              tracer advection schemes 
    645684      !!---------------------------------------------------------------------- 
    646       INTEGER ::   ioptio          ! temporary integer 
     685      INTEGER ::   ioptio          ! local integer 
     686      !! 
    647687      NAMELIST/namdyn_vor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix, ln_dynvor_een 
    648688      !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.