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/ZDF/zdftmx.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/ZDF/zdftmx.F90

    r2528 r2715  
    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 
     
    2424   USE in_out_manager  ! I/O manager 
    2525   USE iom             ! I/O Manager 
     26   USE lib_mpp         ! MPP library 
     27   USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    2628 
    2729   IMPLICIT NONE 
     
    3032   PUBLIC   zdf_tmx         ! called in step module  
    3133   PUBLIC   zdf_tmx_init    ! called in opa module  
     34   PUBLIC   zdf_tmx_alloc   ! called in nemogcm module 
    3235 
    3336   LOGICAL, PUBLIC, PARAMETER ::   lk_zdftmx = .TRUE.    !: tidal mixing flag 
     
    4144   REAL(wp) ::  rn_tfe_itf = 1.        ! ITF tidal dissipation efficiency (St Laurent et al. 2002) 
    4245 
    43    REAL(wp), DIMENSION(jpi,jpj)     ::   en_tmx     ! energy available for tidal mixing (W/m2) 
    44    REAL(wp), DIMENSION(jpi,jpj)     ::   mask_itf   ! mask to use over Indonesian area 
    45    REAL(wp), DIMENSION(jpi,jpj,jpk) ::   az_tmx     ! coefficient used to evaluate the tidal induced Kz 
     46   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   en_tmx     ! energy available for tidal mixing (W/m2) 
     47   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   mask_itf   ! mask to use over Indonesian area 
     48   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   az_tmx     ! coefficient used to evaluate the tidal induced Kz 
    4649 
    4750   !! * Substitutions 
     
    4952#  include "vectopt_loop_substitute.h90" 
    5053   !!---------------------------------------------------------------------- 
    51    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     54   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    5255   !! $Id$ 
    53    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    54    !!---------------------------------------------------------------------- 
    55  
     56   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     57   !!---------------------------------------------------------------------- 
    5658CONTAINS 
     59 
     60   INTEGER FUNCTION zdf_tmx_alloc() 
     61      !!---------------------------------------------------------------------- 
     62      !!                ***  FUNCTION zdf_tmx_alloc  *** 
     63      !!---------------------------------------------------------------------- 
     64      ALLOCATE(en_tmx(jpi,jpj), mask_itf(jpi,jpj), az_tmx(jpi,jpj,jpk), STAT=zdf_tmx_alloc ) 
     65      ! 
     66      IF( lk_mpp             )   CALL mpp_sum ( zdf_tmx_alloc ) 
     67      IF( zdf_tmx_alloc /= 0 )   CALL ctl_warn('zdf_tmx_alloc: failed to allocate arrays') 
     68   END FUNCTION zdf_tmx_alloc 
     69 
    5770 
    5871   SUBROUTINE zdf_tmx( kt ) 
     
    91104      !!---------------------------------------------------------------------- 
    92105      USE oce, zav_tide  =>   ua    ! use ua as workspace 
     106      USE wrk_nemo, ONLY: zkz => wrk_2d_1 
    93107      !! 
    94108      INTEGER, INTENT(in) ::   kt   ! ocean time-step  
     
    96110      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    97111      REAL(wp) ::   ztpc         ! scalar workspace 
    98       REAL(wp), DIMENSION(jpi,jpj) ::   zkz   ! temporary 2D workspace 
    99       !!---------------------------------------------------------------------- 
    100  
     112      !!---------------------------------------------------------------------- 
     113 
     114      IF(wrk_in_use(2, 1))THEN 
     115         CALL ctl_stop('zdf_tmx : requested workspace array unavailable.')   ;   RETURN 
     116      END IF 
    101117      !                          ! ----------------------- ! 
    102118      !                          !  Standard tidal mixing  !  (compute zav_tide) 
     
    160176      IF(ln_ctl)   CALL prt_ctl(tab3d_1=zav_tide , clinfo1=' tmx - av_tide: ', tab3d_2=avt, clinfo2=' avt: ', ovlap=1, kdim=jpk) 
    161177      ! 
     178      IF(wrk_not_released(2, 1))THEN 
     179         CALL ctl_stop('zdf_tmx : failed to release workspace array.') 
     180      END IF 
     181      ! 
    162182   END SUBROUTINE zdf_tmx 
    163183 
     
    183203      !! References :  Koch-Larrouy et al. 2007, GRL  
    184204      !!---------------------------------------------------------------------- 
     205      USE wrk_nemo, ONLY: zkz => wrk_2d_5 
     206      USE wrk_nemo, ONLY: zsum1 => wrk_2d_2, zsum2 => wrk_2d_3, zsum => wrk_2d_4 
     207      USE wrk_nemo, ONLY: zempba_3d_1 => wrk_3d_1, zempba_3d_2 => wrk_3d_2 
     208      USE wrk_nemo, ONLY: zempba_3d   => wrk_3d_3, zdn2dz      => wrk_3d_4 
     209      USE wrk_nemo, ONLY: zavt_itf    => wrk_3d_5 
     210      !! 
    185211      INTEGER , INTENT(in   )                         ::   kt   ! ocean time-step 
    186212      REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pav  ! Tidal mixing coef. 
     
    188214      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    189215      REAL(wp) ::   zcoef, ztpc   ! temporary scalar 
    190       REAL(wp), DIMENSION(jpi,jpj)     ::   zkz                        ! 2D workspace 
    191       REAL(wp), DIMENSION(jpi,jpj)     ::   zsum1 , zsum2 , zsum       !  -      - 
    192       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zempba_3d_1, zempba_3d_2   ! 3D workspace 
    193       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zempba_3d  , zdn2dz        !  -      - 
    194       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zavt_itf                   !  -      - 
    195       !!---------------------------------------------------------------------- 
    196  
     216      !!---------------------------------------------------------------------- 
     217      ! 
     218      IF( wrk_in_use(2, 2,3,4,5) .OR. wrk_in_use(3, 1,2,3,4,5) )THEN 
     219         CALL ctl_stop('tmx_itf : requested workspace arrays unavailable.') 
     220         RETURN 
     221      END IF 
    197222      !                             ! compute the form function using N2 at each time step 
    198223      zempba_3d_1(:,:,jpk) = 0.e0 
     
    279304      END DO 
    280305      ! 
     306      IF( wrk_not_released(2, 2,3,4,5) .OR. & 
     307          wrk_not_released(3, 1,2,3,4,5) )THEN 
     308         CALL ctl_stop('tmx_itf : failed to release workspace arrays.') 
     309      END IF 
     310      ! 
    281311   END SUBROUTINE tmx_itf 
    282312 
     
    317347      !!              Koch-Larrouy et al. 2007, GRL. 
    318348      !!---------------------------------------------------------------------- 
    319       USE oce,   zav_tide  =>   ua   ! use ua as workspace 
    320       !! 
    321       INTEGER ::   ji, jj, jk    ! dummy loop indices 
    322       INTEGER ::   inum          ! temporary logical unit 
    323       REAL(wp) ::   ztpc, ze_z   ! total power consumption 
    324       REAL(wp), DIMENSION(jpi,jpj) ::  zem2, zek1   ! read M2 and K1 tidal energy 
    325       REAL(wp), DIMENSION(jpi,jpj) ::  zkz          ! total M2, K1 and S2 tidal energy 
    326       REAL(wp), DIMENSION(jpi,jpj) ::  zfact        ! used for vertical structure function 
    327       REAL(wp), DIMENSION(jpi,jpj) ::  zhdep        ! Ocean depth  
    328       REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zpc      ! power consumption 
     349      USE oce     ,         zav_tide =>  ua         ! ua used as workspace 
     350      USE wrk_nemo, ONLY:   zem2     =>  wrk_2d_1   ! read M2 and  
     351      USE wrk_nemo, ONLY:   zek1     =>  wrk_2d_2   ! K1 tidal energy 
     352      USE wrk_nemo, ONLY:   zkz      =>  wrk_2d_3   ! total M2, K1 and S2 tidal energy 
     353      USE wrk_nemo, ONLY:   zfact    =>  wrk_2d_4   ! used for vertical structure function 
     354      USE wrk_nemo, ONLY:   zhdep    =>  wrk_2d_5   ! Ocean depth  
     355      USE wrk_nemo, ONLY:   zpc      =>  wrk_3d_1   ! power consumption 
     356      !! 
     357      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     358      INTEGER  ::   inum         ! local integer 
     359      REAL(wp) ::   ztpc, ze_z   ! local scalars 
    329360      !! 
    330361      NAMELIST/namzdf_tmx/ rn_htmx, rn_n2min, rn_tfe, rn_me, ln_tmx_itf, rn_tfe_itf 
    331362      !!---------------------------------------------------------------------- 
     363 
     364      IF( wrk_in_use(2, 1,2,3,4,5)  .OR.  wrk_in_use(3, 1)  ) THEN 
     365         CALL ctl_stop('zdf_tmx_init : requested workspace arrays unavailable.')   ;   RETURN 
     366      END IF 
    332367 
    333368      REWIND( numnam )               ! Read Namelist namtmx : Tidal Mixing 
     
    347382      ENDIF 
    348383 
     384      !                              ! allocate tmx arrays 
     385      IF( zdf_tmx_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'zdf_tmx_init : unable to allocate tmx arrays' ) 
     386 
    349387      IF( ln_tmx_itf ) THEN          ! read the Indonesian Through Flow mask 
    350388         CALL iom_open('mask_itf',inum) 
     
    488526      ENDIF 
    489527      ! 
     528      IF(wrk_not_released(2, 1,2,3,4,5) .OR.   & 
     529         wrk_not_released(3, 1)          )   CALL ctl_stop( 'zdf_tmx_init : failed to release workspace arrays' ) 
     530      ! 
    490531   END SUBROUTINE zdf_tmx_init 
    491532 
Note: See TracChangeset for help on using the changeset viewer.