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/DIA/diaar5.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/DIA/diaar5.F90

    r2528 r2715  
    77   !!            3.3  !  2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA 
    88   !!---------------------------------------------------------------------- 
    9 #if defined key_diaar5 
     9#if defined key_diaar5   || defined key_esopa 
    1010   !!---------------------------------------------------------------------- 
    1111   !!   'key_diaar5'  :                           activate ar5 diagnotics 
     
    2525   PUBLIC   dia_ar5        ! routine called in step.F90 module 
    2626   PUBLIC   dia_ar5_init   ! routine called in opa.F90 module 
     27   PUBLIC   dia_ar5_alloc  ! routine called in nemogcm.F90 module 
    2728 
    2829   LOGICAL, PUBLIC, PARAMETER :: lk_diaar5 = .TRUE.   ! coupled flag 
     
    3031   REAL(wp)                         ::   vol0         ! ocean volume (interior domain) 
    3132   REAL(wp)                         ::   area_tot     ! total ocean surface (interior domain) 
    32    REAL(wp), DIMENSION(jpi,jpj    ) ::   area         ! cell surface (interior domain) 
    33    REAL(wp), DIMENSION(jpi,jpj    ) ::   thick0       ! ocean thickness (interior domain) 
    34    REAL(wp), DIMENSION(jpi,jpj,jpk) ::   sn0          ! initial salinity 
     33   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   area         ! cell surface (interior domain) 
     34   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
     35   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
    3536       
    3637   !! * Substitutions 
     
    4344CONTAINS 
    4445 
     46   FUNCTION dia_ar5_alloc() 
     47      !!---------------------------------------------------------------------- 
     48      !!                    ***  ROUTINE dia_ar5_alloc  *** 
     49      !!---------------------------------------------------------------------- 
     50      INTEGER :: dia_ar5_alloc 
     51      !!---------------------------------------------------------------------- 
     52      ! 
     53      ALLOCATE( area(jpi,jpj), thick0(jpi,jpj) , sn0(jpi,jpj,jpk) , STAT=dia_ar5_alloc ) 
     54      ! 
     55      IF( lk_mpp             )   CALL mpp_sum ( dia_ar5_alloc ) 
     56      IF( dia_ar5_alloc /= 0 )   CALL ctl_warn('dia_ar5_alloc: failed to allocate arrays') 
     57      ! 
     58   END FUNCTION dia_ar5_alloc 
     59 
     60 
    4561   SUBROUTINE dia_ar5( kt ) 
    4662      !!---------------------------------------------------------------------- 
     
    4864      !! 
    4965      !! ** Purpose :   compute and output some AR5 diagnostics 
    50       !! 
    51       !!---------------------------------------------------------------------- 
     66      !!---------------------------------------------------------------------- 
     67      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     68      USE wrk_nemo, ONLY:   zarea_ssh => wrk_2d_1 , zbotpres => wrk_2d_2   ! 2D workspace 
     69      USE wrk_nemo, ONLY:   zrhd      => wrk_3d_1 , zrhop    => wrk_3d_2   ! 3D      - 
     70      USE wrk_nemo, ONLY:   ztsn      => wrk_4d_1                          ! 4D      - 
     71      ! 
    5272      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    53       !! 
     73      ! 
    5474      INTEGER  ::   ji, jj, jk                      ! dummy loop arguments 
    5575      REAL(wp) ::   zvolssh, zvol, zssh_steric, zztmp, zarho, ztemp, zsal, zmass 
    56       REAL(wp), DIMENSION(jpi,jpj    ) ::   zarea_ssh, zbotpres 
    57       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zrhd, zrhop 
    58       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) ::   ztsn 
    5976      !!-------------------------------------------------------------------- 
     77 
     78      IF( wrk_in_use(2, 1,2) .OR.   & 
     79          wrk_in_use(3, 1,2) .OR.   & 
     80          wrk_in_use(4, 1)   ) THEN 
     81         CALL ctl_stop('dia_ar5: requested workspace arrays unavailable')   ;   RETURN 
     82      ENDIF 
    6083 
    6184      CALL iom_put( 'cellthc', fse3t(:,:,:) ) 
     
    137160      CALL iom_put( 'saltot' , zsal  ) 
    138161      ! 
     162      IF( wrk_not_released(2, 1,2) .OR.   & 
     163          wrk_not_released(3, 1,2) .OR.   & 
     164          wrk_not_released(4, 1)   )   CALL ctl_stop('dia_ar5: failed to release workspace arrays') 
     165      ! 
    139166   END SUBROUTINE dia_ar5 
    140167 
     
    146173      !! ** Purpose :   initialization for AR5 diagnostic computation 
    147174      !!---------------------------------------------------------------------- 
     175      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     176      USE wrk_nemo, ONLY:   wrk_4d_1      ! 4D workspace 
     177      ! 
    148178      INTEGER  ::   inum 
    149179      INTEGER  ::   ik 
    150180      INTEGER  ::   ji, jj, jk  ! dummy loop indices 
    151181      REAL(wp) ::   zztmp   
    152       REAL(wp), DIMENSION(jpi,jpj,jpk, 2) ::   zsaldta   ! Jan/Dec levitus salinity 
    153       !!---------------------------------------------------------------------- 
    154       ! 
     182      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   zsaldta   ! Jan/Dec levitus salinity 
     183      !!---------------------------------------------------------------------- 
     184      ! 
     185      IF(wrk_in_use(4, 1) ) THEN 
     186         CALL ctl_stop('dia_ar5_init: requested workspace array unavailable.')   ;   RETURN 
     187      ENDIF 
     188      zsaldta => wrk_4d_1(:,:,:,1:2) 
     189 
     190      !                                      ! allocate dia_ar5 arrays 
     191      IF( dia_ar5_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 
     192 
    155193      area(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) 
    156194 
     
    183221      ENDIF 
    184222      ! 
     223      IF( wrk_not_released(4, 1) )   CALL ctl_stop('dia_ar5_init: failed to release workspace array') 
     224      ! 
    185225   END SUBROUTINE dia_ar5_init 
    186226 
Note: See TracChangeset for help on using the changeset viewer.