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 2616 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90 – NEMO

Ignore:
Timestamp:
2011-02-26T11:28:03+01:00 (13 years ago)
Author:
gm
Message:

dynamic mem: #785 ; move the allocation vertical physics from nemogcm to ZDF modules (compilation check using key_esopa)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r2590 r2616  
    5656   PUBLIC   zdf_tke_init   ! routine called in opa module 
    5757   PUBLIC   tke_rst        ! routine called in step module 
    58    PUBLIC   zdf_tke_alloc  ! routine called in nemogcm module 
    5958 
    6059   LOGICAL , PUBLIC, PARAMETER              ::   lk_zdftke = .TRUE.  !: TKE vertical mixing flag 
    61  
    62 #if defined key_c1d 
    63    !                                                           !!** 1D cfg only  **   ('key_c1d') 
    64    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e_dis, e_mix   !: dissipation and mixing turbulent lengh scales 
    65    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e_pdl, e_ric   !: prandl and local Richardson numbers 
    66 #endif 
    6760 
    6861   !                                      !!** Namelist  namzdf_tke  ** 
     
    8881   REAL(wp) ::   rhftau_scl = 1.0_wp       ! scale factor applied to HF part of taum  (nn_etau=3) 
    8982 
    90    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:), PUBLIC ::   en   ! now turbulent kinetic energy   [m2/s2] 
    91     
    92    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)           ::   htau    ! depth of tke penetration (nn_htau) 
    93    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)         ::   dissl   ! now mixing lenght of dissipation 
     83   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en             !: now turbulent kinetic energy   [m2/s2] 
     84#if defined key_c1d 
     85   !                                                                        !!** 1D cfg only  **   ('key_c1d') 
     86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e_dis, e_mix   !: dissipation and mixing turbulent lengh scales 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   e_pdl, e_ric   !: prandl and local Richardson numbers 
     88#endif 
     89   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   htau           ! depth of tke penetration (nn_htau) 
     90   REAL(wp)        , ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dissl          ! now mixing lenght of dissipation 
    9491 
    9592   !! * Substitutions 
     
    9794#  include "vectopt_loop_substitute.h90" 
    9895   !!---------------------------------------------------------------------- 
    99    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     96   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    10097   !! $Id$ 
    10198   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    103100CONTAINS 
    104101 
    105    FUNCTION zdf_tke_alloc() 
    106       !!---------------------------------------------------------------------- 
    107       !!                ***  ROUTINE zdf_tke_alloc  *** 
    108       !!---------------------------------------------------------------------- 
    109       IMPLICIT none 
    110       INTEGER :: zdf_tke_alloc 
    111       !!---------------------------------------------------------------------- 
    112  
    113       ALLOCATE(                                                            & 
     102   INTEGER FUNCTION zdf_tke_alloc() 
     103      !!---------------------------------------------------------------------- 
     104      !!                ***  FUNCTION zdf_tke_alloc  *** 
     105      !!---------------------------------------------------------------------- 
     106      ALLOCATE(                                                                    & 
    114107#if defined key_c1d 
    115                e_dis(jpi,jpj,jpk), e_mix(jpi,jpj,jpk),                     & 
    116                e_pdl(jpi,jpj,jpk), e_ric(jpi,jpj,jpk),                     & 
     108         &      e_dis(jpi,jpj,jpk) , e_mix(jpi,jpj,jpk) ,                          & 
     109         &      e_pdl(jpi,jpj,jpk) , e_ric(jpi,jpj,jpk) ,                          & 
    117110#endif 
    118                en(jpi,jpj,jpk),    htau(jpi,jpj),      dissl(jpi,jpj,jpk), & 
    119                Stat=zdf_tke_alloc) 
    120  
    121       IF(zdf_tke_alloc /= 0)THEN 
    122          CALL ctl_warn('zdf_tke_alloc: failed to allocate arrays.') 
    123       END IF 
    124  
     111         &      en   (jpi,jpj,jpk) , htau (jpi,jpj)     , dissl(jpi,jpj,jpk) , STAT=zdf_tke_alloc ) 
     112         ! 
     113      IF( lk_mpp             )   CALL mpp_sum ( zdf_tke_alloc ) 
     114      IF( zdf_tke_alloc /= 0 )   CALL ctl_warn('zdf_tke_alloc: failed to allocate arrays') 
     115      ! 
    125116   END FUNCTION zdf_tke_alloc 
    126117 
     
    220211      !!-------------------------------------------------------------------- 
    221212      ! 
    222       IF( (.NOT. iwrk_use(2,1)) .OR. & 
    223           (.NOT. wrk_use(2, 1)) .OR. & 
    224           (.NOT. wrk_use(3, 1)) )THEN 
    225          CALL ctl_stop('tke_tke : requested workspace arrays unavailable.') 
    226          RETURN 
     213      IF( .NOT. iwrk_use(2, 1) .OR. & 
     214          .NOT.  wrk_use(2, 1) .OR. & 
     215          .NOT.  wrk_use(3, 1)   )THEN 
     216         CALL ctl_stop('tke_tke : requested workspace arrays unavailable.')   ;   RETURN 
    227217      END IF 
    228218 
     
    438428         END DO 
    439429      ENDIF 
    440       ! 
    441430      CALL lbc_lnk( en, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    442431      ! 
    443       IF( (.NOT. iwrk_release(2,1)) .OR. & 
    444           (.NOT. wrk_release(2, 1)) .OR. & 
    445           (.NOT. wrk_release(3, 1)) )THEN 
    446          CALL ctl_stop('tke_tke : failed to release workspace arrays.') 
    447       END IF 
     432      IF( .NOT. iwrk_release(2 ,1) .OR.   & 
     433          .NOT.  wrk_release(2, 1) .OR.   & 
     434          .NOT.  wrk_release(3, 1)  )   CALL ctl_stop( 'tke_tke : failed to release workspace arrays' ) 
    448435      ! 
    449436   END SUBROUTINE tke_tke 
     
    724711         WRITE(numout,*) '      critical Richardson nb with your parameters  ri_cri = ', ri_cri 
    725712      ENDIF 
     713 
     714      !                              ! allocate tke arrays 
     715      IF( zdf_tke_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_tke_init : unable to allocate arrays' ) 
    726716 
    727717      !                               !* Check of some namelist values 
Note: See TracChangeset for help on using the changeset viewer.