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/TRA/traldf_iso_grif.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/TRA/traldf_iso_grif.F90

    r2528 r2715  
    1616   USE oce             ! ocean dynamics and active tracers 
    1717   USE dom_oce         ! ocean space and time domain 
     18   USE phycst          ! physical constants 
    1819   USE trc_oce         ! share passive tracers/Ocean variables 
    1920   USE zdf_oce         ! ocean vertical physics 
     
    2324   USE in_out_manager  ! I/O manager 
    2425   USE iom             ! I/O library 
    25 #if defined key_diaar5 
    26    USE phycst          ! physical constants 
    2726   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    28 #endif 
     27   USE lib_mpp         ! MPP library 
    2928 
    3029   IMPLICIT NONE 
    3130   PRIVATE 
    3231 
    33    PUBLIC tra_ldf_iso_grif   ! routine called by traldf.F90 
    34  
    35    REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE ::   psix_eiv 
    36    REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE ::   psiy_eiv 
    37    REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE ::   ah_wslp2 
     32   PUBLIC   tra_ldf_iso_grif   ! routine called by traldf.F90 
     33 
     34   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   psix_eiv, psiy_eiv   !: eiv stream function (diag only) 
     35   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   ah_wslp2             !: aeiv*w-slope^2 
     36   REAL(wp),         DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   zdkt                 !  atypic workspace 
    3837 
    3938   !! * Substitutions 
     
    9089      !! ** Action :   Update pta arrays with the before rotated diffusion 
    9190      !!---------------------------------------------------------------------- 
    92       USE oce,   zftu => ua   ! use ua as workspace 
    93       USE oce,   zftv => va   ! use va as workspace 
    94       !! 
     91      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     92      USE oce     , ONLY:   zftu => ua       , zftv => va            ! (ua,va) used as 3D workspace 
     93      USE wrk_nemo, ONLY:   zdit => wrk_3d_6 , zdjt => wrk_3d_7 , ztfw => wrk_3d_8   ! 3D workspace 
     94      USE wrk_nemo, ONLY:   z2d  => wrk_2d_1                                         ! 2D workspace 
     95      ! 
    9596      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index 
    9697      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator) 
     
    100101      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend  
    101102      REAL(wp)                             , INTENT(in   ) ::   pahtb0     ! background diffusion coef 
    102       !! 
     103      ! 
    103104      INTEGER  ::  ji, jj, jk,jn   ! dummy loop indices 
    104105      INTEGER  ::  ip,jp,kp        ! dummy loop indices 
     
    107108      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      - 
    108109      REAL(wp) ::  zcoef0, zbtr                  !   -      - 
    109       REAL(wp), DIMENSION(jpi,jpj,0:1) ::   zdkt               ! 2D+1 workspace 
    110       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdit, zdjt, ztfw   ! 3D workspace 
     110      !REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdkt           ! 2D+1 workspace 
    111111      ! 
    112112      REAL(wp) ::   zslope_skew, zslope_iso, zslope2, zbu, zbv 
     
    114114      REAL(wp) ::   zah, zah_slp, zaei_slp 
    115115#if defined key_diaar5 
    116       REAL(wp), DIMENSION(jpi,jpj)     ::   z2d                ! 2D workspace 
    117       REAL(wp)                         ::   zztmp              ! local scalar 
     116      REAL(wp) ::   zztmp              ! local scalar 
    118117#endif 
    119118      !!---------------------------------------------------------------------- 
     119 
     120      IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1) ) THEN 
     121         CALL ctl_stop('tra_ldf_iso_grif: requested workspace arrays unavailable.')   ;   RETURN 
     122      ENDIF 
     123      ! ARP - line below uses 'bounds re-mapping' which is only defined in 
     124      ! Fortran 2003 and up. We would be OK if code was written to use 
     125      ! zdkt(:,:,1:2) instead as then wouldn't need to re-map bounds. 
     126      ! As it is, we make zdkt a module array and allocate it in _alloc(). 
     127      !zdkt(1:jpi,1:jpj,0:1) => wrk_3d_9(:,:,1:2) 
    120128 
    121129      IF( kt == nit000 )  THEN 
     
    124132         IF(lwp) WRITE(numout,*) '                   WARNING: STILL UNDER TEST, NOT RECOMMENDED. USE AT YOUR OWN PERIL' 
    125133         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    126          ALLOCATE( ah_wslp2(jpi,jpj,jpk) , STAT=ierr ) 
    127          IF( ierr > 0 ) THEN 
    128             CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator ah_wslp2 ' )   ;   RETURN 
    129          ENDIF 
     134         ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr ) 
     135         IF( lk_mpp   )   CALL mpp_sum ( ierr ) 
     136         IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate arrays') 
    130137         IF( ln_traldf_gdia ) THEN 
    131138            ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr ) 
    132             IF( ierr > 0 ) THEN 
    133                CALL ctl_stop( 'tra_ldf_iso_grif : unable to allocate Griffies operator diagnostics ' )   ;   RETURN 
    134             ENDIF 
     139            IF( lk_mpp   )   CALL mpp_sum ( ierr ) 
     140            IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics') 
    135141         ENDIF 
    136142      ENDIF 
     
    342348      END DO 
    343349      ! 
     350      IF( wrk_not_released(3, 6,7,8) .OR.   & 
     351          wrk_not_released(2, 1)       )   CALL ctl_stop('tra_ldf_iso_grif: failed to release workspace arrays') 
     352      ! 
    344353  END SUBROUTINE tra_ldf_iso_grif 
    345354 
Note: See TracChangeset for help on using the changeset viewer.