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 2618 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90 – NEMO

Ignore:
Timestamp:
2011-02-26T13:31:38+01:00 (13 years ago)
Author:
gm
Message:

dynamic mem: #785 ; move dyn allocation from nemogcm to module when possible (continuation)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90

    r2590 r2618  
    3939   PUBLIC   dyn_vor        ! routine called by step.F90 
    4040   PUBLIC   dyn_vor_init   ! routine called by opa.F90 
    41    PUBLIC   dyn_vor_alloc  ! routine called by nemogcm.F90 
    4241 
    4342   !                                             !!* Namelist namdyn_vor: vorticity term 
     
    5150   INTEGER ::   nrvm = 2   ! =2 relative vorticity ; =3 metric term 
    5251   INTEGER ::   ntot = 4   ! =4 total vorticity (relative + planetary) ; =5 coriolis + metric term 
    53  
    54 !!$#if defined key_vvl 
    55 !!$   REAL(wp), DIMENSION(jpi,jpj,jpk)       ::   ze3f  
    56 !!$#else 
    57 !!$   REAL(wp), ALLOCATABLE, DIMENSION(jpi,jpj,jpk), SAVE ::   ze3f 
    58 !!$#endif 
    59    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ze3f 
    6052 
    6153   !! * Substitutions 
     
    6759   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    6860   !!---------------------------------------------------------------------- 
    69  
    7061CONTAINS 
    71  
    72    FUNCTION dyn_vor_alloc() 
    73       !!---------------------------------------------------------------------- 
    74       !!              *** Routine dyn_vor_alloc *** 
    75       !!---------------------------------------------------------------------- 
    76       IMPLICIT none 
    77       INTEGER :: dyn_vor_alloc 
    78       !!---------------------------------------------------------------------- 
    79  
    80       ALLOCATE(ze3f(jpi,jpj,jpk), Stat=dyn_vor_alloc) 
    81  
    82       IF(dyn_vor_alloc /= 0 )THEN 
    83          CALL ctl_warn('dyn_vor_alloc: failed to allocate array ze3f.') 
    84       END IF 
    85  
    86    END FUNCTION dyn_vor_alloc 
    87  
    8862 
    8963   SUBROUTINE dyn_vor( kt ) 
     
    584558      !! References : Arakawa and Lamb 1980, Mon. Wea. Rev., 109, 18-36 
    585559      !!---------------------------------------------------------------------- 
    586       USE wrk_nemo, ONLY: wrk_use, wrk_release 
    587       USE wrk_nemo, ONLY: zwx => wrk_2d_1,  zwy => wrk_2d_2,  zwz => wrk_2d_3  
    588       USE wrk_nemo, ONLY: ztnw => wrk_2d_4, ztne => wrk_2d_5, & 
    589                           ztsw => wrk_2d_6, ztse => wrk_2d_7 
    590       !! 
     560      USE wrk_nemo, ONLY:   wrk_use, wrk_release 
     561      USE wrk_nemo, ONLY:   zwx  => wrk_2d_1 , zwy  => wrk_2d_2 ,  zwz => wrk_2d_3  
     562      USE wrk_nemo, ONLY:   ztnw => wrk_2d_4 , ztne => wrk_2d_5  
     563      USE wrk_nemo, ONLY:   ztsw => wrk_2d_6 , ztse => wrk_2d_7 
     564#if defined key_vvl 
     565      USE wrk_nemo, ONLY:   ze3f => wrk_3d_1 
     566#endif 
     567      ! 
    591568      INTEGER , INTENT(in   )                         ::   kt     ! ocean time-step index 
    592569      INTEGER , INTENT(in   )                         ::   kvor   ! =ncor (planetary) ; =ntot (total) ; 
     
    596573      !! 
    597574      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    598       REAL(wp) ::   zfac12, zua, zva   ! temporary scalars 
    599       !!---------------------------------------------------------------------- 
    600  
    601       IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7))THEN 
    602          CALL ctl_stop('dyn:vor_een : requested workspace arrays unavailable.') 
    603          RETURN 
     575      INTEGER  ::   ierr               ! local integer 
     576      REAL(wp) ::   zfac12, zua, zva   ! local scalars 
     577#if ! defined key_vvl 
     578      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE ::   ze3f 
     579#endif 
     580      !!---------------------------------------------------------------------- 
     581 
     582      IF(.NOT. wrk_use(2, 1,2,3,4,5,6,7) .AND. .NOT. wrk_use(3, 1) ) THEN 
     583         CALL ctl_stop('dyn:vor_een : requested workspace arrays unavailable.')   ;   RETURN 
    604584      END IF 
    605585 
     
    608588         IF(lwp) WRITE(numout,*) 'dyn:vor_een : vorticity term: energy and enstrophy conserving scheme' 
    609589         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     590         IF( .NOT.lk_vvl ) THEN 
     591            ALLOCATE( ze3f(jpi,jpj,jpk) , STAT=ierr ) 
     592            IF( lk_mpp    )   CALL mpp_sum ( ierr ) 
     593            IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dyn:vor_een : unable to allocate arrays' ) 
     594         ENDIF 
    610595      ENDIF 
    611596 
     
    696681      END DO                                           !   End of slab 
    697682      !                                                ! =============== 
    698       IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7))THEN 
    699          CALL ctl_stop('dyn:vor_een : failed to release workspace arrays.') 
    700       END IF 
     683      IF(.NOT. wrk_release(2, 1,2,3,4,5,6,7) .AND.   & 
     684         .NOT. wrk_release(3, 1)  )   CALL ctl_stop('dyn:vor_een : failed to release workspace arrays') 
    701685      ! 
    702686   END SUBROUTINE vor_een 
Note: See TracChangeset for help on using the changeset viewer.