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

Changeset 2616


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)

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC
Files:
13 edited

Legend:

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

    r2590 r2616  
    77   !!            3.2  !  2009-07  (G.Madec) addition of avm 
    88   !!---------------------------------------------------------------------- 
    9    USE par_oce         ! ocean parameters 
     9   USE par_oce        ! ocean parameters 
     10   USE in_out_manager ! I/O manager 
    1011 
    1112   IMPLICIT NONE 
    1213   PRIVATE 
    1314 
    14    ! Routine accessibility 
    1515   PUBLIC  zdf_oce_alloc    ! Called in nemogcm.F90 
    1616 
     
    3939   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(  :,:) ::   avtb_2d        !: set in tke_init, for other modif than ice 
    4040   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(  :,:) ::   bfrua, bfrva   !: Bottom friction coefficients set in zdfbfr 
    41    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avmu , avmv    !: vertical viscosity coef at uw- & vw-pts        [m2/s] 
    42    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm  , avt     !: vertical viscosity & diffusivity coef at w-pt  [m2/s] 
     41   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avmu , avmv    !: vertical viscosity coef at uw- & vw-pts       [m2/s] 
     42   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm  , avt     !: vertical viscosity & diffusivity coef at w-pt [m2/s] 
    4343  
    4444   !!---------------------------------------------------------------------- 
    45    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     45   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    4646   !! $Id$  
    47    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    48    !!====================================================================== 
     47   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     48   !!---------------------------------------------------------------------- 
    4949CONTAINS 
    5050 
    51    FUNCTION zdf_oce_alloc() 
     51   INTEGER FUNCTION zdf_oce_alloc() 
    5252      !!---------------------------------------------------------------------- 
    53       !!            *** Routine zdf_oce_alloc *** 
     53      !!            *** FUNCTION zdf_oce_alloc *** 
    5454      !!---------------------------------------------------------------------- 
    55       USE in_out_manager, ONLY: ctl_warn 
    56       IMPLICIT none 
    57       INTEGER zdf_oce_alloc 
    58       !!---------------------------------------------------------------------- 
    59  
    60       ALLOCATE(avmb(jpk), avtb(jpk), avtb_2d(jpi,jpj), & 
    61                bfrua(jpi,jpj), bfrva(jpi,jpj),         & 
    62                avmu(jpi,jpj,jpk), avmv(jpi,jpj,jpk),   & 
    63                avm(jpi,jpj,jpk), avt(jpi,jpj,jpk),     & 
    64                Stat = zdf_oce_alloc ) 
    65  
    66       IF(zdf_oce_alloc /= 0)THEN 
    67          CALL ctl_warn('zdf_oce_alloc: failed to allocate arrays.') 
    68       END IF 
    69  
     55      ! 
     56      ALLOCATE(avmb(jpk) , bfrua(jpi,jpj) ,                         & 
     57         &     avtb(jpk) , bfrva(jpi,jpj) , avtb_2d(jpi,jpj) ,      & 
     58         &     avmu(jpi,jpj,jpk), avm(jpi,jpj,jpk)           ,      & 
     59         &     avmv(jpi,jpj,jpk), avt(jpi,jpj,jpk)           , STAT = zdf_oce_alloc ) 
     60         ! 
     61      IF( zdf_oce_alloc /= 0 )   CALL ctl_warn('zdf_oce_alloc: failed to allocate arrays') 
     62      ! 
    7063   END FUNCTION zdf_oce_alloc 
    7164 
     65   !!====================================================================== 
    7266END MODULE zdf_oce 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90

    r2590 r2616  
    4040   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  bfrcoef2d   ! 2D bottom drag coefficient 
    4141                                                               ! Now initialised in zdf_bfr_alloc() 
    42  
    4342   !! * Substitutions 
    4443#  include "vectopt_loop_substitute.h90" 
    4544#  include "domzgr_substitute.h90" 
    4645   !!---------------------------------------------------------------------- 
    47    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     46   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    4847   !! $Id$ 
    4948   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    5150CONTAINS 
    5251 
    53    FUNCTION zdf_bfr_alloc() 
    54       !!---------------------------------------------------------------------- 
    55       !!                ***  ROUTINE zdf_bfr_alloc  *** 
    56       !!---------------------------------------------------------------------- 
    57       IMPLICIT none 
    58       INTEGER :: zdf_bfr_alloc 
    59       !!---------------------------------------------------------------------- 
    60  
    61       ALLOCATE(bfrcoef2d(jpi,jpj), Stat=zdf_bfr_alloc) 
    62  
    63       IF(zdf_bfr_alloc == 0)THEN 
    64          bfrcoef2d(:,:) = 1.e-3_wp 
    65       ELSE 
    66          CALL ctl_warn('zdf_bfr_alloc: allocation of array bfrcoef2d failed.') 
    67       END IF 
    68  
     52   INTEGER FUNCTION zdf_bfr_alloc() 
     53      !!---------------------------------------------------------------------- 
     54      !!                ***  FUNCTION zdf_bfr_alloc  *** 
     55      !!---------------------------------------------------------------------- 
     56      ALLOCATE( bfrcoef2d(jpi,jpj), STAT=zdf_bfr_alloc ) 
     57      ! 
     58      IF( lk_mpp             )   CALL mpp_sum ( zdf_bfr_alloc ) 
     59      IF( zdf_bfr_alloc /= 0 )   CALL ctl_warn('zdf_bfr_alloc: failed to allocate arrays.') 
    6960   END FUNCTION zdf_bfr_alloc 
    7061 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r2590 r2616  
    4141#  include "vectopt_loop_substitute.h90" 
    4242   !!---------------------------------------------------------------------- 
    43    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     43   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    4444   !! $Id$ 
    45    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    46    !!---------------------------------------------------------------------- 
    47  
     45   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     46   !!---------------------------------------------------------------------- 
    4847CONTAINS 
    4948 
    50    FUNCTION zdf_ddm_alloc() 
     49   INTEGER FUNCTION zdf_ddm_alloc() 
    5150      !!---------------------------------------------------------------------- 
    5251      !!                ***  ROUTINE zdf_ddm_alloc  *** 
    5352      !!---------------------------------------------------------------------- 
    54       IMPLICIT none 
    55       INTEGER zdf_ddm_alloc 
    56       !!---------------------------------------------------------------------- 
    57  
    58       ALLOCATE( avs(jpi,jpj,jpk), rrau(jpi,jpj,jpk), Stat = zdf_ddm_alloc) 
    59  
    60       IF(zdf_ddm_alloc /= 0)THEN 
    61          CALL ctl_warn('zdf_ddm_alloc: failed to allocate avs and rrau arrays.') 
    62       END IF 
    63  
     53      ALLOCATE( avs(jpi,jpj,jpk), rrau(jpi,jpj,jpk), STAT = zdf_ddm_alloc ) 
     54      ! 
     55      IF( lk_mpp             )   CALL mpp_sum ( zdf_ddm_alloc ) 
     56      IF( zdf_ddm_alloc /= 0 )   CALL ctl_warn('zdf_ddm_alloc: failed to allocate arrays') 
    6457   END FUNCTION zdf_ddm_alloc 
    6558 
     
    111104      !!---------------------------------------------------------------------- 
    112105 
    113       IF(.not. wrk_use(2, 1,2,3,4,5))THEN 
    114          CALL ctl_stop('zdf_ddm: Requested workspace arrays already in use.') 
    115          RETURN 
     106      IF( .NOT. wrk_use(2, 1,2,3,4,5) ) THEN 
     107         CALL ctl_stop('zdf_ddm: Requested workspace arrays already in use.')   ;   RETURN 
    116108      END IF 
    117109 
     
    206198      ENDIF 
    207199      ! 
    208       IF(.not. wrk_release(2, 1,2,3,4,5))THEN 
    209          CALL ctl_stop('zdf_ddm: Release of workspace arrays failed.') 
    210       END IF 
     200      IF( .NOT. wrk_release(2, 1,2,3,4,5) )   CALL ctl_stop('zdf_ddm: Release of workspace arrays failed') 
    211201      ! 
    212202   END SUBROUTINE zdf_ddm 
     
    238228      ENDIF 
    239229      ! 
     230      !                              ! allocate zdfddm arrays 
     231      IF( zdf_ddm_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' ) 
     232      ! 
    240233   END SUBROUTINE zdf_ddm_init 
    241234 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm_substitute.h90

    r2528 r2616  
    44   !! ** purpose :   substitute fsaht. the eddy diffusivity coeff. 
    55   !!      with a constant or 1D or 2D or 3D array, using CPP macro. 
    6    !!---------------------------------------------------------------------- 
    7    !!---------------------------------------------------------------------- 
    8    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    9    !! $Id$  
    10    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    116   !!---------------------------------------------------------------------- 
    127#if defined key_zdfddm 
     
    1712#   define   fsavs(i,j,k)   avt(i,j,k) 
    1813#endif 
     14   !!---------------------------------------------------------------------- 
     15   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     16   !! $Id$  
     17   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     18   !!---------------------------------------------------------------------- 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r2528 r2616  
    3131#  include "domzgr_substitute.h90" 
    3232   !!---------------------------------------------------------------------- 
    33    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     33   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    3434   !! $Id$ 
    35    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     35   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3636   !!---------------------------------------------------------------------- 
    37  
    3837CONTAINS 
    3938 
     
    5352      !! References :   Lazar, A., these de l'universite Paris VI, France, 1997 
    5453      !!---------------------------------------------------------------------- 
    55       USE oce,   zavt_evd  =>   ua          ! use ua as workspace 
    56       USE oce,   zavm_evd  =>   va          ! use va as workspace 
     54      USE oce,   zavt_evd  =>   ua   ! use ua as workspace 
     55      USE oce,   zavm_evd  =>   va   ! use va as workspace 
    5756      !! 
    58       INTEGER, INTENT( in ) ::   kt         ! ocean time-step indexocean time step 
     57      INTEGER, INTENT( in ) ::   kt   ! ocean time-step indexocean time step 
    5958      !! 
    60       INTEGER ::   ji, jj, jk               ! dummy loop indices 
     59      INTEGER ::   ji, jj, jk   ! dummy loop indices 
    6160      !!---------------------------------------------------------------------- 
    6261 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfgls.F90

    r2590 r2616  
    3535   PUBLIC   zdf_gls_init   ! routine called in opa module 
    3636   PUBLIC   gls_rst        ! routine called in step module 
    37    PUBLIC   zdf_gls_alloc  ! routine called in nemogcm module 
    38  
    39    LOGICAL , PUBLIC, PARAMETER              ::   lk_zdfgls = .TRUE.   !: TKE vertical mixing flag 
     37 
     38   LOGICAL , PUBLIC, PARAMETER ::   lk_zdfgls = .TRUE.   !: TKE vertical mixing flag 
     39   ! 
    4040   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   en      !: now turbulent kinetic energy 
    4141   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   mxln    !: now mixing length 
     
    111111CONTAINS 
    112112 
    113    FUNCTION zdf_gls_alloc() 
     113   INTEGER FUNCTION zdf_gls_alloc() 
    114114      !!---------------------------------------------------------------------- 
    115       !!                ***  ROUTINE zdf_gls_alloc  *** 
     115      !!                ***  FUNCTION zdf_gls_alloc  *** 
    116116      !!---------------------------------------------------------------------- 
    117       IMPLICIT none 
    118       INTEGER :: zdf_gls_alloc 
    119       !!---------------------------------------------------------------------- 
    120  
    121       ALLOCATE(en(jpi,jpj,jpk),  mxln(jpi,jpj,jpk), zwall(jpi,jpj,jpk), & 
    122                ustars2(jpi,jpj), ustarb2(jpi,jpj),                      & 
    123                Stat=zdf_gls_alloc) 
    124  
    125       IF(zdf_gls_alloc /= 0)THEN 
    126          CALL ctl_warn('zdf_gls_alloc: failed to allocate arrays.') 
    127       END IF 
    128  
     117      ALLOCATE( en(jpi,jpj,jpk),  mxln(jpi,jpj,jpk), zwall(jpi,jpj,jpk) ,     & 
     118         &      ustars2(jpi,jpj), ustarb2(jpi,jpj)                      , STAT=zdf_gls_alloc ) 
     119         ! 
     120      IF( lk_mpp             )   CALL mpp_sum ( zdf_gls_alloc ) 
     121      IF( zdf_gls_alloc /= 0 )   CALL ctl_warn('zdf_gls_alloc: failed to allocate arrays') 
    129122   END FUNCTION zdf_gls_alloc 
    130123 
     
    160153      !!-------------------------------------------------------------------- 
    161154 
    162       IF( (.NOT. wrk_use(2, 1,2,3)) .OR. (.NOT. wrk_use(3, 1,2,3,4,5)) )THEN 
    163          CALL ctl_stop('zdf_gls: requested workspace arrays unavailable.') 
    164          RETURN 
     155      IF(  .NOT. wrk_use(2, 1,2,3)  .OR.  .NOT. wrk_use(3, 1,2,3,4,5)  ) THEN 
     156         CALL ctl_stop('zdf_gls: requested workspace arrays unavailable.')   ;   RETURN 
    165157      END IF 
    166158 
     
    890882      ENDIF 
    891883      ! 
    892       IF( (.NOT. wrk_release(2, 1,2,3)) .OR. & 
    893           (.NOT. wrk_release(3, 1,2,3,4,5)) )THEN 
    894          CALL ctl_stop('zdf_gls: failed to release workspace arrays.') 
    895       END IF 
     884      IF( .NOT. wrk_release(2, 1,2,3)     .OR. & 
     885          .NOT. wrk_release(3, 1,2,3,4,5)  )   CALL ctl_stop('zdf_gls: failed to release workspace arrays') 
    896886      ! 
    897887   END SUBROUTINE zdf_gls 
     
    927917      !!---------------------------------------------------------- 
    928918 
    929       REWIND ( numnam )                !* Read Namelist namzdf_gls 
    930       READ   ( numnam, namzdf_gls ) 
     919      REWIND( numnam )                 !* Read Namelist namzdf_gls 
     920      READ  ( numnam, namzdf_gls ) 
    931921 
    932922      IF(lwp) THEN                     !* Control print 
     
    954944      ENDIF 
    955945 
     946      !                                !* allocate gls arrays 
     947      IF( zdf_gls_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_gls_init : unable to allocate arrays' ) 
     948 
    956949      !                                !* Check of some namelist values 
    957950      IF( nn_tkebc_surf < 0 .OR. nn_tkebc_surf > 1 ) CALL ctl_stop( 'bad flag: nn_tkebc_surf is 0 or 1' ) 
     
    962955      IF( nn_clos       < 0 .OR. nn_clos       > 3 ) CALL ctl_stop( 'bad flag: nn_clos is 0, 1, 2 or 3' ) 
    963956 
    964       ! Initialisation of the parameters for the choosen closure 
    965       ! -------------------------------------------------------- 
    966       ! 
    967       SELECT CASE ( nn_clos ) 
    968       ! 
    969       CASE( 0 )               ! k-kl  (Mellor-Yamada) 
     957      SELECT CASE ( nn_clos )          !* set the parameters for the chosen closure 
     958      ! 
     959      CASE( 0 )                              ! k-kl  (Mellor-Yamada) 
    970960         ! 
    971961         IF(lwp) WRITE(numout,*) 'The choosen closure is k-kl closed to the classical Mellor-Yamada' 
     
    985975         END SELECT 
    986976         ! 
    987       CASE( 1 )               ! k-eps 
     977      CASE( 1 )                              ! k-eps 
    988978         ! 
    989979         IF(lwp) WRITE(numout,*) 'The choosen closure is k-eps' 
     
    1003993         END SELECT 
    1004994         ! 
    1005       CASE( 2 )               ! k-omega 
     995      CASE( 2 )                              ! k-omega 
    1006996         ! 
    1007997         IF(lwp) WRITE(numout,*) 'The choosen closure is k-omega' 
     
    10211011         END SELECT 
    10221012         ! 
    1023       CASE( 3 )               ! generic 
     1013      CASE( 3 )                              ! generic 
    10241014         ! 
    10251015         IF(lwp) WRITE(numout,*) 'The choosen closure is generic' 
     
    10411031      END SELECT 
    10421032 
    1043       ! Initialisation of the parameters of the stability functions 
    1044       ! ----------------------------------------------------------- 
    1045       ! 
    1046       SELECT CASE ( nn_stab_func ) 
    1047       ! 
    1048       CASE ( 0 )             ! Galperin stability functions 
     1033      ! 
     1034      SELECT CASE ( nn_stab_func )     !* set the parameters of the stability functions 
     1035      ! 
     1036      CASE ( 0 )                             ! Galperin stability functions 
    10491037         ! 
    10501038         IF(lwp) WRITE(numout,*) 'Stability functions from Galperin' 
     
    10581046         rghcri  =  0.02_wp 
    10591047         ! 
    1060       CASE ( 1 )             ! Kantha-Clayson stability functions 
     1048      CASE ( 1 )                             ! Kantha-Clayson stability functions 
    10611049         ! 
    10621050         IF(lwp) WRITE(numout,*) 'Stability functions from Kantha-Clayson' 
     
    10701058         rghcri  =  0.02_wp 
    10711059         ! 
    1072       CASE ( 2 )             ! Canuto A stability functions 
     1060      CASE ( 2 )                             ! Canuto A stability functions 
    10731061         ! 
    10741062         IF(lwp) WRITE(numout,*) 'Stability functions from Canuto A' 
     
    10941082         rghcri  =  0.03_wp 
    10951083         ! 
    1096       CASE ( 3 )             ! Canuto B stability functions 
     1084      CASE ( 3 )                             ! Canuto B stability functions 
    10971085         ! 
    10981086         IF(lwp) WRITE(numout,*) 'Stability functions from Canuto B' 
     
    11191107      END SELECT 
    11201108     
    1121       ! Set Schmidt number for psi diffusion in the wave breaking case 
    1122       ! See equation 13 of Carniel et al, Ocean modelling, 30, 225-239, 2009 
    1123       ! or equation (17) of Burchard, JPO, 31, 3133-3145, 2001 
     1109      !                                !* Set Schmidt number for psi diffusion in the wave breaking case 
     1110      !                                     ! See Eq. (13) of Carniel et al, OM, 30, 225-239, 2009 
     1111      !                                     !  or Eq. (17) of Burchard, JPO, 31, 3133-3145, 2001 
    11241112      IF( ln_sigpsi .AND. ln_crban ) THEN 
    11251113         zcr = SQRT( 1.5_wp*rsc_tke ) * rcm_sf / vkarmn 
     
    11311119      ENDIF 
    11321120  
    1133       ! Shear free turbulence parameters: 
     1121      !                                !* Shear free turbulence parameters 
    11341122      ! 
    11351123      ra_sf  = -4._wp * rnn * SQRT( rsc_tke ) / ( (1._wp+4._wp*rmm) * SQRT( rsc_tke )   & 
     
    11421130 
    11431131      ! 
    1144       IF(lwp) THEN      ! Control print 
     1132      IF(lwp) THEN                     !* Control print 
    11451133         WRITE(numout,*) 
    11461134         WRITE(numout,*) 'Limit values' 
     
    11651153      ENDIF 
    11661154 
    1167       ! Constants initialization 
     1155      !                                !* Constants initialization 
    11681156      rc02  = rc0  * rc0   ;   rc02r = 1. / rc02 
    11691157      rc03  = rc02 * rc0 
     
    11921180         avmv(:,:,jk) = avmb(jk) * vmask(:,:,jk) 
    11931181      END DO 
    1194       !                                !* read or initialize all required files  
    1195       CALL gls_rst( nit000, 'READ' ) 
     1182      !                               
     1183      CALL gls_rst( nit000, 'READ' )   !* read or initialize all required files 
    11961184      ! 
    11971185   END SUBROUTINE zdf_gls_init 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r2528 r2616  
    3737    
    3838   !!---------------------------------------------------------------------- 
    39    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     39   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    4040   !! $Id$ 
    41    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     41   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    4242   !!---------------------------------------------------------------------- 
    43     
    4443CONTAINS 
    4544 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfkpp.F90

    r2613 r2616  
    99   !!            8.2  ! 2003-10 (Chanut J.) re-writting 
    1010   !!   NEMO     1.0  ! 2005-01 (C. Ethe, G. Madec) Free form, F90 + creation of tra_kpp routine 
    11    !!            3.3  ! 2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA 
     11   !!            3.3  ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA 
    1212   !!---------------------------------------------------------------------- 
    1313#if defined key_zdfkpp   ||   defined key_esopa 
     
    3939   PUBLIC   zdf_kpp_init  ! routine called by opa.F90 
    4040   PUBLIC   tra_kpp       ! routine called by step.F90 
    41 #if defined key_top 
    4241   PUBLIC   trc_kpp       ! routine called by trcstp.F90 
    43 #endif 
    44    PUBLIC   zdf_kpp_alloc ! routine called by nemogcm.F90 
    4542 
    4643   LOGICAL , PUBLIC, PARAMETER ::   lk_zdfkpp = .TRUE.    !: KPP vertical mixing flag 
     
    147144#  include  "zdfddm_substitute.h90" 
    148145   !!---------------------------------------------------------------------- 
    149    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     146   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    150147   !! $Id$ 
    151    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     148   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    152149   !!---------------------------------------------------------------------- 
    153  
    154150CONTAINS 
    155151 
    156    FUNCTION zdf_kpp_alloc() 
    157       IMPLICIT none 
    158       INTEGER :: zdf_kpp_alloc 
    159  
    160       ALLOCATE(ghats(jpi,jpj,jpk), wt0(jpi,jpj), ws0(jpi,jpj), hkpp(jpi,jpj), & 
     152   INTEGER FUNCTION zdf_kpp_alloc() 
     153      !!---------------------------------------------------------------------- 
     154      !!                 ***  FUNCTION zdf_kpp_alloc  *** 
     155      !!---------------------------------------------------------------------- 
     156      ALLOCATE( ghats(jpi,jpj,jpk), wt0(jpi,jpj), ws0(jpi,jpj), hkpp(jpi,jpj), & 
    161157#if ! defined key_kpplktb 
    162                del(jpk,jpk),                                                  & 
    163 #endif 
    164                ratt(jpk),                                                     & 
    165                etmean(jpi,jpj,jpk), eumean(jpi,jpj,jpk), evmean(jpi,jpj,jpk), & 
     158         &      del(jpk,jpk),                                                  & 
     159#endif 
     160         &      ratt(jpk),                                                     & 
     161         &      etmean(jpi,jpj,jpk), eumean(jpi,jpj,jpk), evmean(jpi,jpj,jpk), & 
    166162#if defined key_c1d 
    167                rig(jpi,jpj,jpk),  rib(jpi,jpj,jpk), buof(jpi,jpj,jpk),        & 
    168                mols(jpi,jpj,jpk), ekdp(jpi,jpj),                              & 
    169 #endif 
    170                Stat=zdf_kpp_alloc) 
    171  
    172       IF(zdf_kpp_alloc /= 0)THEN 
    173          CALL ctl_warn('zdf_kpp_alloc: failed to allocate arrays.') 
    174       END IF 
    175  
     163         &      rig (jpi,jpj,jpk), rib(jpi,jpj,jpk), buof(jpi,jpj,jpk),        & 
     164         &      mols(jpi,jpj,jpk), ekdp(jpi,jpj),                              & 
     165#endif 
     166         &      STAT=zdf_kpp_alloc ) 
     167         ! 
     168      IF( lk_mpp             )   CALL mpp_sum ( zdf_kpp_alloc ) 
     169      IF( zdf_kpp_alloc /= 0 )   CALL ctl_warn('zdf_kpp_alloc: failed to allocate arrays.') 
    176170   END FUNCTION zdf_kpp_alloc 
    177171 
     
    280274      !!-------------------------------------------------------------------- 
    281275      
    282       IF( (.NOT. wrk_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)) .OR. & 
    283           (.NOT. wrk_use(2, 1,2,3,4,5,6,7,8,9,10,11))          .OR. & 
    284           (.NOT. wrk_use_xz(1,2,3)) )THEN 
    285          CALL ctl_stop('zdf_kpp : requested workspace arrays unavailable.') 
    286          RETURN 
     276      IF( .NOT. wrk_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 
     277          .NOT. wrk_use(2, 1,2,3,4,5,6,7,8,9,10,11)          .OR. & 
     278          .NOT. wrk_use_xz(1,2,3)                              ) THEN 
     279         CALL ctl_stop('zdf_kpp : requested workspace arrays unavailable.')   ;   RETURN 
    287280      END IF 
    288281      ! Set-up pointers to 2D spaces 
     
    12411234         ENDIF 
    12421235 
    1243       IF( (.NOT. wrk_release(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)) .OR. & 
    1244           (.NOT. wrk_release(2, 1,2,3,4,5,6,7,8,9,10,11))          .OR. & 
    1245           (.NOT. wrk_release_xz(1,2,3)) )THEN 
    1246          CALL ctl_stop('zdf_kpp : failed to release workspace arrays.') 
    1247          RETURN 
    1248       END IF 
    1249  
     1236      IF( .NOT. wrk_release(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14) .OR. & 
     1237          .NOT. wrk_release(2, 1,2,3,4,5,6,7,8,9,10,11)          .OR. & 
     1238          .NOT. wrk_release_xz(1,2,3)  )   CALL ctl_stop('zdf_kpp : failed to release workspace arrays.') 
     1239      ! 
    12501240   END SUBROUTINE zdf_kpp 
    12511241 
     
    14161406         WRITE(numout,*) '     horizontal average flag                       nn_ave      = ', nn_ave 
    14171407      ENDIF 
     1408 
     1409      !                              ! allocate zdfkpp arrays 
     1410      IF( zdf_kpp_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_kpp_init : unable to allocate arrays' ) 
    14181411 
    14191412      ll_kppcustom = .FALSE. 
     
    16101603      WRITE(*,*) 'tra_kpp: You should not have seen this print! error?', kt 
    16111604   END SUBROUTINE tra_kpp 
    1612 #if defined key_top 
    16131605   SUBROUTINE trc_kpp( kt )          ! Dummy routine 
    16141606      WRITE(*,*) 'trc_kpp: You should not have seen this print! error?', kt 
    16151607   END SUBROUTINE trc_kpp 
    16161608#endif 
    1617 #endif 
    16181609 
    16191610   !!====================================================================== 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r2590 r2616  
    2020 
    2121   PUBLIC   zdf_mxl       ! called by step.F90 
    22    PUBLIC   zdf_mxl_alloc ! called by nemogcm.F90 
    2322 
    2423   INTEGER , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   nmln    !: number of level in the mixed layer (used by TOP) 
     
    3029#  include "domzgr_substitute.h90" 
    3130   !!---------------------------------------------------------------------- 
    32    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     31   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    3332   !! $Id$  
    34    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     33   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3534   !!---------------------------------------------------------------------- 
    36  
    3735CONTAINS 
    3836 
    39    FUNCTION zdf_mxl_alloc() 
     37   INTEGER FUNCTION zdf_mxl_alloc() 
    4038      !!---------------------------------------------------------------------- 
    41       !!               ***  ROUTINE zdf_mxl_alloc  *** 
     39      !!               ***  FUNCTION zdf_mxl_alloc  *** 
    4240      !!---------------------------------------------------------------------- 
    43       IMPLICIT none 
    44       INTEGER :: zdf_mxl_alloc 
    45       !!---------------------------------------------------------------------- 
    46  
    47       ALLOCATE(nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), & 
    48                Stat=zdf_mxl_alloc) 
    49  
    50       IF(zdf_mxl_alloc /= 0)THEN 
    51          CALL ctl_warn('zdf_mxl_alloc: failed to allocate arrays.') 
    52       END IF 
    53  
     41      ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT=zdf_mxl_alloc) 
     42      ! 
     43      IF( lk_mpp             )   CALL mpp_sum ( zdf_mxl_alloc ) 
     44      IF( zdf_mxl_alloc /= 0 )   CALL ctl_warn('zdf_mxl_alloc: failed to allocate arrays.') 
    5445   END FUNCTION zdf_mxl_alloc 
    5546 
     
    7364      !!---------------------------------------------------------------------- 
    7465      USE wrk_nemo, ONLY: iwrk_use, iwrk_release 
    75       USE wrk_nemo, ONLY: imld => iwrk_2d_1 ! temporary workspace 
     66      USE wrk_nemo, ONLY: imld => iwrk_2d_1    ! 2D workspace 
    7667      !! 
    7768      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    8374      !!---------------------------------------------------------------------- 
    8475 
    85       IF(.NOT. iwrk_use(2,1))THEN 
    86          CALL ctl_stop('zdf_mxl : requested workspace array unavailable.') 
    87          RETURN 
     76      IF( .NOT. iwrk_use(2,1) )THEN 
     77         CALL ctl_stop('zdf_mxl : requested workspace array unavailable.')   ;   RETURN 
    8878      END IF 
    8979 
     
    9282         IF(lwp) WRITE(numout,*) 'zdf_mxl : mixed layer depth' 
    9383         IF(lwp) WRITE(numout,*) '~~~~~~~ ' 
     84         !                              ! allocate zdfmxl arrays 
     85         IF( zdf_mxl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_mxl : unable to allocate arrays' ) 
    9486      ENDIF 
    9587 
     
    120112      IF(ln_ctl)   CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 ) 
    121113      ! 
    122       IF(.NOT. iwrk_release(2,1))THEN 
    123          CALL ctl_stop('zdf_mxl : failed to release workspace array.') 
    124       END IF 
     114      IF( .NOT. iwrk_release(2,1) )   CALL ctl_stop('zdf_mxl : failed to release workspace array') 
    125115      ! 
    126116   END SUBROUTINE zdf_mxl 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90

    r2613 r2616  
    3131   PUBLIC   zdf_ric         ! called by step.F90 
    3232   PUBLIC   zdf_ric_init    ! called by opa.F90 
    33    PUBLIC   zdf_ric_alloc   ! called by nemogcm.F90 
    3433 
    3534   LOGICAL, PUBLIC, PARAMETER ::   lk_zdfric = .TRUE.   !: Richardson vertical mixing flag 
     
    4544#  include "domzgr_substitute.h90" 
    4645   !!---------------------------------------------------------------------- 
    47    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     46   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    4847   !! $Id$ 
    49    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     48   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    5049   !!---------------------------------------------------------------------- 
    5150CONTAINS 
    5251 
    53    FUNCTION zdf_ric_alloc() 
    54       !!---------------------------------------------------------------------- 
    55       !!                 ***  ROUTINE zdfric  *** 
    56       !!---------------------------------------------------------------------- 
    57       IMPLICIT none 
    58       INTEGER :: zdf_ric_alloc 
    59       !!---------------------------------------------------------------------- 
    60  
    61       ALLOCATE(tmric(jpi,jpj,jpk), Stat=zdf_ric_alloc) 
    62  
    63       IF(zdf_ric_alloc /= 0)THEN 
    64          CALL ctl_warn('zdf_ric_alloc: failed to allocate arrays.') 
    65       END IF 
    66  
     52   INTEGER FUNCTION zdf_ric_alloc() 
     53      !!---------------------------------------------------------------------- 
     54      !!                 ***  FUNCTION zdf_ric_alloc  *** 
     55      !!---------------------------------------------------------------------- 
     56      ALLOCATE( tmric(jpi,jpj,jpk)     , STAT=zdf_ric_alloc ) 
     57      ! 
     58      IF( lk_mpp             )   CALL mpp_sum ( zdf_ric_alloc ) 
     59      IF( zdf_ric_alloc /= 0 )   CALL ctl_warn('zdf_ric_alloc: failed to allocate arrays.') 
    6760   END FUNCTION zdf_ric_alloc 
    6861 
     
    196189      ENDIF 
    197190      ! 
    198       DO jk = 1, jpk                 ! weighting mean array tmric for 4 T-points which accounts for coastal boundary conditions. 
    199          DO jj = 2, jpj               
     191      !                              ! allocate zdfric arrays 
     192      IF( zdf_ric_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_ric_init : unable to allocate arrays' ) 
     193      ! 
     194      DO jk = 1, jpk                 ! weighting mean array tmric for 4 T-points 
     195         DO jj = 2, jpj              ! which accounts for coastal boundary conditions             
    200196            DO ji = 2, jpi 
    201197               tmric(ji,jj,jk) =  tmask(ji,jj,jk)                                  & 
     
    205201         END DO 
    206202      END DO 
    207       tmric(:,1,:) = 0.e0 
     203      tmric(:,1,:) = 0._wp 
    208204      ! 
    209205      DO jk = 1, jpk                 ! Initialization of vertical eddy coef. to the background value 
  • 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 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r2590 r2616  
    88   !!            3.3  !  2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase 
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_zdftmx 
     10#if defined key_zdftmx   ||   defined key_esopa 
    1111   !!---------------------------------------------------------------------- 
    1212   !!   'key_zdftmx'                                  Tidal vertical mixing 
     
    5151#  include "vectopt_loop_substitute.h90" 
    5252   !!---------------------------------------------------------------------- 
    53    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     53   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    5454   !! $Id$ 
    55    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    56    !!---------------------------------------------------------------------- 
    57  
     55   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     56   !!---------------------------------------------------------------------- 
    5857CONTAINS 
    5958 
    60    FUNCTION zdf_tmx_alloc() 
    61       !!---------------------------------------------------------------------- 
    62       !!                ***  ROUTINE zdf_tmx_alloc  *** 
    63       !!---------------------------------------------------------------------- 
    64       IMPLICIT none 
    65       INTEGER :: zdf_tmx_alloc 
    66       !!---------------------------------------------------------------------- 
    67  
    68       ALLOCATE(en_tmx(jpi,jpj), mask_itf(jpi,jpj), az_tmx(jpi,jpj,jpk), & 
    69                Stat=zdf_tmx_alloc) 
    70  
    71       IF(zdf_tmx_alloc /= 0)THEN 
    72          CALL ctl_warn('zdf_tmx_alloc: failed to allocate arrays.') 
    73       END IF 
    74  
     59   INTEGER FUNCTION zdf_tmx_alloc() 
     60      !!---------------------------------------------------------------------- 
     61      !!                ***  FUNCTION zdf_tmx_alloc  *** 
     62      !!---------------------------------------------------------------------- 
     63      ALLOCATE(en_tmx(jpi,jpj), mask_itf(jpi,jpj), az_tmx(jpi,jpj,jpk), STAT=zdf_tmx_alloc ) 
     64      ! 
     65      IF( lk_mpp             )   CALL mpp_sum ( zdf_tmx_alloc ) 
     66      IF( zdf_tmx_alloc /= 0 )   CALL ctl_warn('zdf_tmx_alloc: failed to allocate arrays') 
    7567   END FUNCTION zdf_tmx_alloc 
    7668 
     
    120112 
    121113      IF(.NOT. wrk_use(2, 1))THEN 
    122          CALL ctl_stop('zdf_tmx : requested workspace array unavailable.') 
    123          RETURN 
     114         CALL ctl_stop('zdf_tmx : requested workspace array unavailable.')   ;   RETURN 
    124115      END IF 
    125116      !                          ! ----------------------- ! 
     
    355346      !!              Koch-Larrouy et al. 2007, GRL. 
    356347      !!---------------------------------------------------------------------- 
    357       USE oce,   zav_tide  =>   ua   ! use ua as workspace 
    358       USE wrk_nemo, ONLY: zem2 => wrk_2d_1, &      ! read M2 and  
    359                           zek1 => wrk_2d_2         !    K1 tidal energy 
    360       USE wrk_nemo, ONLY: zkz   => wrk_2d_3        ! total M2, K1 and S2 tidal energy 
    361       USE wrk_nemo, ONLY: zfact => wrk_2d_4        ! used for vertical structure function 
    362       USE wrk_nemo, ONLY: zhdep => wrk_2d_5        ! Ocean depth  
    363       USE wrk_nemo, ONLY: zpc   => wrk_3d_1        ! power consumption 
    364       !! 
    365       INTEGER ::   ji, jj, jk    ! dummy loop indices 
    366       INTEGER ::   inum          ! temporary logical unit 
    367       REAL(wp) ::   ztpc, ze_z   ! total power consumption 
     348      USE oce     ,         zav_tide =>  ua         ! ua used as workspace 
     349      USE wrk_nemo, ONLY:   zem2     =>  wrk_2d_1   ! read M2 and  
     350      USE wrk_nemo, ONLY:   zek1     =>  wrk_2d_2   ! K1 tidal energy 
     351      USE wrk_nemo, ONLY:   zkz      =>  wrk_2d_3   ! total M2, K1 and S2 tidal energy 
     352      USE wrk_nemo, ONLY:   zfact    =>  wrk_2d_4   ! used for vertical structure function 
     353      USE wrk_nemo, ONLY:   zhdep    =>  wrk_2d_5   ! Ocean depth  
     354      USE wrk_nemo, ONLY:   zpc      =>  wrk_3d_1   ! power consumption 
     355      !! 
     356      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     357      INTEGER  ::   inum         ! local integer 
     358      REAL(wp) ::   ztpc, ze_z   ! local scalars 
    368359      !! 
    369360      NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 
    370361      !!---------------------------------------------------------------------- 
    371362 
    372       IF( (.NOT. wrk_use(2, 1,2,3,4,5)) .OR. (.NOT. wrk_use(3, 1)) )THEN 
    373          CALL ctl_stop('zdf_tmx_init : requested workspace arrays unavailable.') 
    374          RETURN 
     363      IF( .NOT. wrk_use(2, 1,2,3,4,5)  .OR.  .NOT. wrk_use(3, 1)  ) THEN 
     364         CALL ctl_stop('zdf_tmx_init : requested workspace arrays unavailable.')   ;   RETURN 
    375365      END IF 
    376366 
     
    391381      ENDIF 
    392382 
     383      !                              ! allocate tmx arrays 
     384      IF( zdf_tmx_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 
     385 
    393386      IF( ln_tmx_itf ) THEN          ! read the Indonesian Through Flow mask 
    394387         CALL iom_open('mask_itf',inum) 
     
    532525      ENDIF 
    533526      ! 
    534       IF( (.NOT. wrk_release(2, 1,2,3,4,5)) .OR. (.NOT. wrk_release(3, 1)) )THEN 
    535          CALL ctl_stop('zdf_tmx_init : failed to release workspace arrays.') 
    536       END IF 
     527      IF(.NOT. wrk_release(2, 1,2,3,4,5) .OR.   & 
     528         .NOT. wrk_release(3, 1)          )   CALL ctl_stop( 'zdf_tmx_init : failed to release workspace arrays' ) 
    537529      ! 
    538530   END SUBROUTINE zdf_tmx_init 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r2614 r2616  
    465465     !! ** Method  : 
    466466     !!---------------------------------------------------------------------- 
    467 #if   defined key_diahth   ||   defined key_esopa 
    468      USE diahth,       ONLY: dia_hth_alloc 
    469 #endif 
    470      USE diaptr,       ONLY: dia_ptr_alloc 
    471467     USE diawri,       ONLY: dia_wri_alloc 
    472      USE divcur,       ONLY: div_cur_alloc 
    473468     USE dom_oce,      ONLY: dom_oce_alloc 
    474 #if defined key_vvl 
    475      USE domvvl,       ONLY: dom_vvl_alloc 
    476 #endif 
    477      USE domwri,       ONLY: dom_wri_alloc 
    478 #if defined key_dtasal   ||   defined key_esopa 
    479      USE dtasal,       ONLY: dta_sal_alloc 
    480 #endif 
    481 #if defined key_dtatem   ||   defined key_esopa 
    482      USE dtatem,       ONLY: dta_tem_alloc 
    483 #endif 
    484 #if defined key_ldfslp   ||   defined key_esopa 
    485      USE dynldf_bilapg,ONLY: dyn_ldf_bilapg_alloc 
    486 #endif 
    487 #if defined key_ldfslp   ||   defined key_esopa 
    488      USE dynldf_iso,   ONLY: dyn_ldf_iso_alloc 
    489 #endif 
    490 #if   defined key_dynspg_ts   ||   defined key_vvl   ||   defined key_esopa 
    491      USE dynspg_oce,   ONLY: dynspg_oce_alloc 
    492 #endif 
    493      USE dynvor,       ONLY: dyn_vor_alloc 
    494469     USE dynzdf_exp,   ONLY: dyn_zdf_exp_alloc 
    495470#if   defined key_floats   ||   defined key_esopa 
     
    584559      USE wrk_nemo,     ONLY: wrk_alloc 
    585560      USE zdfbfr,       ONLY: zdf_bfr_alloc 
    586 #if defined key_zdfddm   ||   defined key_esopa 
    587       USE zdfddm,       ONLY: zdf_ddm_alloc 
    588 #endif 
    589 #if defined key_zdfkpp   ||   defined key_esopa 
    590       USE zdfkpp,       ONLY: zdf_kpp_alloc 
    591 #endif 
    592 #if defined key_zdfgls   ||   defined key_esopa 
    593       USE zdfgls,       ONLY: zdf_gls_alloc 
    594 #endif 
    595       USE zdfmxl,       ONLY: zdf_mxl_alloc 
    596       USE zdf_oce,      ONLY: zdf_oce_alloc 
    597 #if defined key_zdfric   ||   defined key_esopa 
    598       USE zdfric,       ONLY: zdf_ric_alloc 
    599 #endif 
    600 #if defined key_zdftke   ||   defined key_esopa 
    601       USE zdftke,       ONLY: zdf_tke_alloc 
    602 #endif 
    603 #if defined key_zdftmx 
    604       USE zdftmx,       ONLY: zdf_tmx_alloc 
    605 #endif 
    606       IMPLICIT none 
     561 
    607562      INTEGER :: ierr 
    608563      INTEGER :: i 
     
    611566      ierr = 0 
    612567 
    613       !! Calls to the _alloc() routines should be in the same order as the  
    614       !! modules are USE'd above 
    615       ! End of ice-related allocations 
    616       ierr = ierr + div_cur_alloc() 
    617 #if   defined key_diahth   ||   defined key_esopa 
    618       ierr = ierr + dia_hth_alloc() 
    619 #endif 
    620       ierr = ierr + dia_ptr_alloc() 
    621568      ierr = ierr + dia_wri_alloc() 
    622       ierr = ierr + dom_oce_alloc() 
    623 #if defined key_vvl 
    624       ierr = ierr + dom_vvl_alloc() 
    625 #endif 
    626       ierr = ierr + dom_wri_alloc() 
    627 #if defined key_dtasal   ||   defined key_esopa 
    628       ierr = ierr + dta_sal_alloc() 
    629 #endif 
    630 #if defined key_ldfslp   ||   defined key_esopa 
    631       ierr = ierr + dyn_ldf_bilapg_alloc() 
    632 #endif 
    633 #if defined key_dtatem   ||   defined key_esopa 
    634       ierr = ierr + dta_tem_alloc() 
    635 #endif 
    636 #if defined key_ldfslp   ||   defined key_esopa 
    637       ierr = ierr + dyn_ldf_iso_alloc() 
    638 #endif 
    639 #if   defined key_dynspg_ts   ||   defined key_vvl   ||   defined key_esopa 
    640       ierr = ierr + dynspg_oce_alloc() 
    641 #endif 
    642       ierr = ierr + dyn_vor_alloc() 
     569      ierr = ierr + dom_oce_alloc()       ! ocean domain 
     570      ierr = ierr + zdf_oce_alloc()       ! ocean vertical physics 
     571 
     572 
     573 
    643574      ierr = ierr + dyn_zdf_exp_alloc() 
    644575#if   defined key_floats   ||   defined key_esopa 
    645576      ierr = ierr + flo_oce_alloc() 
    646 #endif 
    647 #if   defined key_floats   ||   defined key_esopa 
    648577      ierr = ierr + flo_wri_alloc() 
    649578#endif 
     
    709638      ierr = ierr + trd_mld_trc_alloc() 
    710639#endif 
    711 #if defined key_cfc 
    712      ierr = ierr + trc_sms_cfc_alloc() 
    713 #endif 
    714640      ! ...end of TOP-related alloc routines 
    715641 
     
    733659      ierr = ierr + wrk_alloc() 
    734660      ierr = ierr + zdf_bfr_alloc() 
    735 #if defined key_zdfddm   ||   defined key_esopa 
    736       ierr = ierr + zdf_ddm_alloc() 
    737 #endif 
    738 #if defined key_zdfkpp   ||   defined key_esopa 
    739       ierr = ierr + zdf_kpp_alloc() 
    740 #endif 
    741 #if defined key_zdfgls   ||   defined key_esopa 
    742       ierr = ierr + zdf_gls_alloc() 
    743 #endif 
    744       ierr = ierr + zdf_mxl_alloc() 
    745       ierr = ierr + zdf_oce_alloc() 
    746 #if defined key_zdfric   ||   defined key_esopa 
    747       ierr = ierr + zdf_ric_alloc() 
    748 #endif 
    749 #if defined key_zdftke   ||   defined key_esopa 
    750       ierr = ierr + zdf_tke_alloc() 
    751 #endif 
    752 #if defined key_zdftmx 
    753       ierr = ierr + zdf_tmx_alloc() 
    754 #endif 
    755  
    756       IF( lk_mpp    )   CALL mpp_sum(ierr) 
     661 
     662      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
    757663      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'nemo_alloc : unable to allocate standard ocean arrays' ) 
    758664      ! 
     
    761667 
    762668   SUBROUTINE nemo_partition( num_pes ) 
    763      USE par_oce 
    764      INTEGER, INTENT(in) :: num_pes ! The number of MPI processes we have 
    765      ! Local variables 
    766      INTEGER, PARAMETER :: nfactmax = 20 
    767      INTEGER :: nfact ! The no. of factors returned 
    768      INTEGER :: ierr  ! Error flag 
    769      INTEGER :: i 
    770      INTEGER :: idiff, mindiff, imin ! For choosing pair of factors that are 
    771                                      ! closest in value 
    772      INTEGER, DIMENSION(nfactmax) :: ifact ! Array of factors 
    773      ierr = 0 
    774  
    775      CALL factorise(ifact, nfactmax, nfact, num_pes, ierr) 
    776  
    777      IF(nfact <= 1)THEN 
    778         WRITE (numout, *) 'WARNING: factorisation of number of PEs failed' 
    779         WRITE (numout, *) '       : using grid of ',num_pes,' x 1' 
    780         jpnj = 1 
    781         jpni = num_pes 
    782      ELSE 
    783         ! Search through factors for the pair that are closest in value 
    784         mindiff = 1000000 
    785         imin    = 1 
    786         DO i=1,nfact-1,2 
    787            idiff = ABS(ifact(i) - ifact(i+1)) 
    788            IF(idiff < mindiff)THEN 
    789               mindiff = idiff 
    790               imin = i 
    791            END IF 
    792         END DO 
    793         jpnj = ifact(imin) 
    794         jpni = ifact(imin + 1) 
    795      ENDIF 
    796      jpnij = jpni*jpnj 
    797  
    798      WRITE(*,*) 'ARPDBG: jpni = ',jpni,'jpnj = ',jpnj,'jpnij = ',jpnij 
    799  
     669      !!---------------------------------------------------------------------- 
     670      !!                 ***  ROUTINE nemo_partition  *** 
     671      !! 
     672      !! ** Purpose :    
     673      !! 
     674      !! ** Method  : 
     675      !!---------------------------------------------------------------------- 
     676      USE par_oce 
     677      INTEGER, INTENT(in) :: num_pes ! The number of MPI processes we have 
     678      ! Local variables 
     679      INTEGER, PARAMETER :: nfactmax = 20 
     680      INTEGER :: nfact ! The no. of factors returned 
     681      INTEGER :: ierr  ! Error flag 
     682      INTEGER :: i 
     683      INTEGER :: idiff, mindiff, imin ! For choosing pair of factors that are closest in value 
     684      INTEGER, DIMENSION(nfactmax) :: ifact ! Array of factors 
     685      !!---------------------------------------------------------------------- 
     686 
     687      ierr = 0 
     688 
     689      CALL factorise( ifact, nfactmax, nfact, num_pes, ierr ) 
     690 
     691      IF( nfact <= 1 ) THEN 
     692         WRITE (numout, *) 'WARNING: factorisation of number of PEs failed' 
     693         WRITE (numout, *) '       : using grid of ',num_pes,' x 1' 
     694         jpnj = 1 
     695         jpni = num_pes 
     696      ELSE 
     697         ! Search through factors for the pair that are closest in value 
     698         mindiff = 1000000 
     699         imin    = 1 
     700         DO i=1,nfact-1,2 
     701            idiff = ABS(ifact(i) - ifact(i+1)) 
     702            IF(idiff < mindiff)THEN 
     703               mindiff = idiff 
     704               imin = i 
     705            END IF 
     706         END DO 
     707         jpnj = ifact(imin) 
     708         jpni = ifact(imin + 1) 
     709      ENDIF 
     710      jpnij = jpni*jpnj 
     711 
     712      WRITE(*,*) 'ARPDBG: jpni = ',jpni,'jpnj = ',jpnj,'jpnij = ',jpnij 
     713      ! 
    800714   END SUBROUTINE nemo_partition 
    801715 
    802    !!====================================================================== 
    803  
    804    SUBROUTINE factorise ( ifax, maxfax, nfax, n, ierr ) 
    805  
    806      ! Subroutine to return the prime factors of n. 
    807      ! nfax factors are returned in array ifax which is of maximum 
    808      ! dimension maxfax. 
    809  
    810      IMPLICIT none 
    811  
    812      ! Subroutine arguments 
    813      INTEGER, INTENT(in)  :: n, maxfax 
    814      INTEGER, INTENT(Out) :: ierr, nfax 
    815      INTEGER, INTENT(out) :: ifax(maxfax) 
    816      ! Local variables. 
    817      INTEGER :: i, ifac, l, nu 
    818      INTEGER, PARAMETER :: ntest = 14 
    819      INTEGER :: lfax(ntest) 
    820  
    821      ! lfax contains the set of allowed factors. 
    822      data (lfax(i),i=1,ntest) / 16384, 8192, 4096, 2048, 1024, 512, & 
    823                              256, 128, 64, 32, 16, 8, 4, 2  / 
    824  
    825      ! Clear the error flag and initialise output vars 
    826      ierr = 0 
    827      ifax = 1 
    828      nfax = 0 
    829  
    830      ! Find the factors of n. 
    831      if ( n.eq.1 ) goto 20 
    832  
    833      ! nu holds the unfactorised part of the number. 
    834      ! nfax holds the number of factors found. 
    835      ! l points to the allowed factor list. 
    836      ! ifac holds the current factor. 
    837  
    838       nu = n 
     716 
     717   SUBROUTINE factorise( ifax, maxfax, nfax, n, ierr ) 
     718      !!---------------------------------------------------------------------- 
     719      !!                     ***  ROUTINE factorise  *** 
     720      !! 
     721      !! ** Purpose :   return the prime factors of n. 
     722      !!                nfax factors are returned in array ifax which is of  
     723      !!                maximum dimension maxfax. 
     724      !! ** Method  : 
     725      !!---------------------------------------------------------------------- 
     726      INTEGER, INTENT(in)  :: n, maxfax 
     727      INTEGER, INTENT(Out) :: ierr, nfax 
     728      INTEGER, INTENT(out) :: ifax(maxfax) 
     729      ! Local variables. 
     730      INTEGER :: i, ifac, l, nu 
     731      INTEGER, PARAMETER :: ntest = 14 
     732      INTEGER :: lfax(ntest) 
     733 
     734      ! lfax contains the set of allowed factors. 
     735      data (lfax(i),i=1,ntest) / 16384, 8192, 4096, 2048, 1024, 512, 256,  & 
     736         &                         128,   64,   32,   16,    8,   4,   2  / 
     737      !!---------------------------------------------------------------------- 
     738 
     739      ! Clear the error flag and initialise output vars 
     740      ierr = 0 
     741      ifax = 1 
    839742      nfax = 0 
    840743 
    841       DO l=ntest,1,-1 
    842  
     744      ! Find the factors of n. 
     745      IF( n == 1 ) GOTO 20 
     746 
     747      ! nu holds the unfactorised part of the number. 
     748      ! nfax holds the number of factors found. 
     749      ! l points to the allowed factor list. 
     750      ! ifac holds the current factor. 
     751 
     752      nu   = n 
     753      nfax = 0 
     754 
     755      DO l = ntest, 1, -1 
     756         ! 
    843757         ifac = lfax(l) 
    844758         IF(ifac > nu)CYCLE 
     
    846760         ! Test whether the factor will divide. 
    847761 
    848          If ( mod(nu,ifac).eq.0 ) then 
    849  
    850             ! Add the factor to the list. 
    851  
    852             nfax = nfax+1 
    853             if ( nfax.gt.maxfax ) then 
     762         IF( MOD(nu,ifac) == 0 ) THEN 
     763            ! 
     764            nfax = nfax+1            ! Add the factor to the list 
     765            IF( nfax > maxfax ) THEN 
    854766               ierr = 6 
    855767               write (*,*) 'FACTOR: insufficient space in factor array ',nfax 
    856768               return 
    857             endif 
     769            ENDIF 
    858770            ifax(nfax) = ifac 
    859771            ! Store the other factor that goes with this one 
    860772            nfax = nfax + 1 
    861             ifax(nfax) = nu/ifac 
     773            ifax(nfax) = nu / ifac 
    862774            !WRITE (*,*) 'ARPDBG, factors ',nfax-1,' & ',nfax,' are ', & 
    863775            !            ifax(nfax-1),' and ',ifax(nfax) 
    864          END IF 
    865  
     776         ENDIF 
     777         ! 
    866778      END DO 
    867779 
    868       ! Label 20 is the exit point from the factor search loop. 
    869    20 continue 
    870  
    871       return 
    872  
     780   20 CONTINUE      ! Label 20 is the exit point from the factor search loop. 
     781      ! 
     782      RETURN 
     783      ! 
    873784  END SUBROUTINE factorise 
    874785 
    875786  !!====================================================================== 
    876  
    877787END MODULE nemogcm 
Note: See TracChangeset for help on using the changeset viewer.