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/IOM/prtctl.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/IOM/prtctl.F90

    r2528 r2715  
    11MODULE prtctl 
    2    !!============================================================================== 
     2   !!====================================================================== 
    33   !!                       ***  MODULE prtctl   *** 
    4    !! Ocean system   : print all SUM trends for each processor domain 
    5    !!============================================================================== 
     4   !! Ocean system : print all SUM trends for each processor domain 
     5   !!====================================================================== 
     6   !! History :  9.0  !  05-07  (C. Talandier) original code 
     7   !!---------------------------------------------------------------------- 
    68   USE dom_oce          ! ocean space and time domain variables 
    79   USE in_out_manager   ! I/O manager 
     
    1113   PRIVATE 
    1214 
    13    !! * Module declaration 
    14    INTEGER, DIMENSION(:), ALLOCATABLE :: numid 
    15    INTEGER, DIMENSION(:), ALLOCATABLE, SAVE ::   &  !: 
    16       nlditl , nldjtl ,   &  !: first, last indoor index for each i-domain 
    17       nleitl , nlejtl ,   &  !: first, last indoor index for each j-domain 
    18       nimpptl, njmpptl,   &  !: i-, j-indexes for each processor 
    19       nlcitl , nlcjtl ,   &  !: dimensions of every subdomain 
    20       ibonitl, ibonjtl 
    21  
    22    REAL(wp), DIMENSION(:), ALLOCATABLE ::   &  !: 
    23       t_ctll , s_ctll ,   &  !: previous trend values 
    24       u_ctll , v_ctll 
    25  
    26    INTEGER ::   ktime        !: time step 
    27  
    28    !! * Routine accessibility 
     15   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   numid 
     16   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   nlditl , nldjtl    ! first, last indoor index for each i-domain 
     17   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   nleitl , nlejtl    ! first, last indoor index for each j-domain 
     18   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   nimpptl, njmpptl   ! i-, j-indexes for each processor 
     19   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   nlcitl , nlcjtl    ! dimensions of every subdomain 
     20   INTEGER , DIMENSION(:), ALLOCATABLE, SAVE ::   ibonitl, ibonjtl   ! 
     21 
     22   REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::   t_ctll , s_ctll    ! previous tracer trend values 
     23   REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE ::   u_ctll , v_ctll    ! previous velocity trend values 
     24 
     25   INTEGER ::   ktime   ! time step 
     26 
    2927   PUBLIC prt_ctl         ! called by all subroutines 
    3028   PUBLIC prt_ctl_info    ! called by all subroutines 
    3129   PUBLIC prt_ctl_init    ! called by opa.F90 
     30 
    3231   !!---------------------------------------------------------------------- 
    3332   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3433   !! $Id$  
    35    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     34   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3635   !!---------------------------------------------------------------------- 
    37  
    38  
    3936CONTAINS 
    4037 
    41    SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2, mask2, clinfo2, ovlap, kdim, clinfo3) 
     38   SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2,   & 
     39      &                                  mask2, clinfo2, ovlap, kdim, clinfo3 ) 
    4240      !!---------------------------------------------------------------------- 
    4341      !!                     ***  ROUTINE prt_ctl  *** 
     
    7472      !!                    kdim    : k- direction for 3D arrays  
    7573      !!                    clinfo3 : additional information  
    76       !! 
    77       !! History : 
    78       !!   9.0  !  05-07  (C. Talandier) original code 
    79       !!---------------------------------------------------------------------- 
    80       !! * Arguments 
    81       REAL(wp), DIMENSION(:,:)  , INTENT(in), OPTIONAL :: tab2d_1 
    82       REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_1 
    83       REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask1 
    84       CHARACTER (len=*)         , INTENT(in), OPTIONAL :: clinfo1 
    85       REAL(wp), DIMENSION(:,:)  , INTENT(in), OPTIONAL :: tab2d_2 
    86       REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_2 
    87       REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask2 
    88       CHARACTER (len=*)         , INTENT(in), OPTIONAL :: clinfo2 
    89       INTEGER                   , INTENT(in), OPTIONAL :: ovlap 
    90       INTEGER                   , INTENT(in), OPTIONAL :: kdim 
    91       CHARACTER (len=*)         , INTENT(in), OPTIONAL :: clinfo3 
    92  
    93       !! * Local declarations 
    94       INTEGER :: overlap, jn, sind, eind, kdir,j_id 
     74      !!---------------------------------------------------------------------- 
     75      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     76      USE wrk_nemo, ONLY:   ztab2d_1 => wrk_2d_30 , ztab2d_2 => wrk_2d_31 
     77      USE wrk_nemo, ONLY:   zmask1   => wrk_3d_11 , zmask2   => wrk_3d_12  
     78      USE wrk_nemo, ONLY:   ztab3d_1 => wrk_3d_13 , ztab3d_2 => wrk_3d_14 
     79      ! 
     80      REAL(wp), DIMENSION(:,:)  , INTENT(in), OPTIONAL ::   tab2d_1 
     81      REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL ::   tab3d_1 
     82      REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL ::   mask1 
     83      CHARACTER (len=*)         , INTENT(in), OPTIONAL ::   clinfo1 
     84      REAL(wp), DIMENSION(:,:)  , INTENT(in), OPTIONAL ::   tab2d_2 
     85      REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL ::   tab3d_2 
     86      REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL ::   mask2 
     87      CHARACTER (len=*)         , INTENT(in), OPTIONAL ::   clinfo2 
     88      INTEGER                   , INTENT(in), OPTIONAL ::   ovlap 
     89      INTEGER                   , INTENT(in), OPTIONAL ::   kdim 
     90      CHARACTER (len=*)         , INTENT(in), OPTIONAL ::   clinfo3 
     91      ! 
    9592      CHARACTER (len=15) :: cl2 
     93      INTEGER ::   overlap, jn, sind, eind, kdir,j_id 
    9694      REAL(wp) :: zsum1, zsum2, zvctl1, zvctl2 
    97       REAL(wp), DIMENSION(jpi,jpj) :: ztab2d_1, ztab2d_2 
    98       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask1, zmask2, ztab3d_1, ztab3d_2 
    99       !!---------------------------------------------------------------------- 
     95      !!---------------------------------------------------------------------- 
     96 
     97      IF( wrk_in_use(2, 30,31) .OR. wrk_in_use(3, 11,12,13,14) ) THEN 
     98         CALL ctl_stop('prt_ctl : requested workspace arrays unavailable')   ;   RETURN 
     99      ENDIF 
    100100 
    101101      ! Arrays, scalars initialization  
     
    115115 
    116116      ! Control of optional arguments 
    117       IF( PRESENT(clinfo2) )  cl2            = clinfo2 
    118       IF( PRESENT(ovlap)   )  overlap        = ovlap 
    119       IF( PRESENT(kdim)    )  kdir           = kdim 
    120       IF( PRESENT(tab2d_1) )  ztab2d_1(:,:)  = tab2d_1(:,:) 
    121       IF( PRESENT(tab2d_2) )  ztab2d_2(:,:)  = tab2d_2(:,:) 
    122       IF( PRESENT(tab3d_1) )  ztab3d_1(:,:,1:kdir)= tab3d_1(:,:,:) 
    123       IF( PRESENT(tab3d_2) )  ztab3d_2(:,:,1:kdir)= tab3d_2(:,:,:) 
    124       IF( PRESENT(mask1)   )  zmask1  (:,:,:)= mask1  (:,:,:) 
    125       IF( PRESENT(mask2)   )  zmask2  (:,:,:)= mask2  (:,:,:) 
    126  
    127       IF( lk_mpp )   THEN 
    128          ! processor number 
     117      IF( PRESENT(clinfo2) )   cl2                  = clinfo2 
     118      IF( PRESENT(ovlap)   )   overlap              = ovlap 
     119      IF( PRESENT(kdim)    )   kdir                 = kdim 
     120      IF( PRESENT(tab2d_1) )   ztab2d_1(:,:)        = tab2d_1(:,:) 
     121      IF( PRESENT(tab2d_2) )   ztab2d_2(:,:)        = tab2d_2(:,:) 
     122      IF( PRESENT(tab3d_1) )   ztab3d_1(:,:,1:kdir) = tab3d_1(:,:,:) 
     123      IF( PRESENT(tab3d_2) )   ztab3d_2(:,:,1:kdir) = tab3d_2(:,:,:) 
     124      IF( PRESENT(mask1)   )   zmask1  (:,:,:)      = mask1  (:,:,:) 
     125      IF( PRESENT(mask2)   )   zmask2  (:,:,:)      = mask2  (:,:,:) 
     126 
     127      IF( lk_mpp ) THEN       ! processor number 
    129128         sind = narea 
    130129         eind = narea 
    131       ELSE 
    132          ! processors total number 
     130      ELSE                    ! processors total number 
    133131         sind = 1 
    134132         eind = ijsplt 
     
    206204      ENDDO 
    207205 
     206      IF( wrk_not_released(2, 30,31)     .OR.   & 
     207          wrk_not_released(3, 11,12,13,14) )   CALL ctl_stop('prt_ctl: failed to release workspace arrays') 
     208      ! 
    208209   END SUBROUTINE prt_ctl 
    209210 
     
    220221      !!                    clinfo2 : information about the ivar2 
    221222      !!                    ivar2   : value to print 
    222       !! 
    223       !! History : 
    224       !!   9.0  !  05-07  (C. Talandier) original code 
    225       !!---------------------------------------------------------------------- 
    226       !! * Arguments 
    227       CHARACTER (len=*), INTENT(in) ::   clinfo1 
     223      !!---------------------------------------------------------------------- 
     224      CHARACTER (len=*), INTENT(in)           ::   clinfo1 
    228225      INTEGER          , INTENT(in), OPTIONAL ::   ivar1 
    229226      CHARACTER (len=*), INTENT(in), OPTIONAL ::   clinfo2 
    230227      INTEGER          , INTENT(in), OPTIONAL ::   ivar2 
    231228      INTEGER          , INTENT(in), OPTIONAL ::   itime 
    232  
    233       !! * Local declarations 
     229      ! 
    234230      INTEGER :: jn, sind, eind, iltime, j_id 
    235231      !!---------------------------------------------------------------------- 
    236232 
    237       IF( lk_mpp )   THEN 
    238          ! processor number 
     233      IF( lk_mpp ) THEN       ! processor number 
    239234         sind = narea 
    240235         eind = narea 
    241       ELSE 
    242          ! total number of processors 
     236      ELSE                    ! total number of processors 
    243237         sind = 1 
    244238         eind = ijsplt 
     
    257251      ! Loop over each sub-domain, i.e. number of processors ijsplt 
    258252      DO jn = sind, eind 
    259           
    260          ! Set logical unit 
    261          j_id = numid(jn - narea + 1) 
    262  
     253         ! 
     254         j_id = numid(jn - narea + 1)         ! Set logical unit 
     255         ! 
    263256         IF( PRESENT(ivar1) .AND. PRESENT(clinfo2) .AND. PRESENT(ivar2) )   THEN 
    264257            WRITE(j_id,*)clinfo1, ivar1, clinfo2, ivar2 
     
    272265            WRITE(j_id,*)clinfo1 
    273266         ENDIF 
    274  
    275       ENDDO 
    276  
    277  
    278       END SUBROUTINE prt_ctl_info 
     267         ! 
     268      END DO 
     269      ! 
     270   END SUBROUTINE prt_ctl_info 
     271 
    279272 
    280273   SUBROUTINE prt_ctl_init 
     
    283276      !! 
    284277      !! ** Purpose :   open ASCII files & compute indices 
    285       !! 
    286       !! History : 
    287       !!   9.0  !  05-07  (C. Talandier) original code 
    288       !!---------------------------------------------------------------------- 
    289       !! * Local declarations 
     278      !!---------------------------------------------------------------------- 
    290279      INTEGER ::   jn, sind, eind, j_id 
    291280      CHARACTER (len=28) :: clfile_out 
     
    295284 
    296285      ! Allocate arrays 
    297       ALLOCATE(nlditl (ijsplt)) 
    298       ALLOCATE(nldjtl (ijsplt)) 
    299       ALLOCATE(nleitl (ijsplt)) 
    300       ALLOCATE(nlejtl (ijsplt)) 
    301       ALLOCATE(nimpptl(ijsplt)) 
    302       ALLOCATE(njmpptl(ijsplt)) 
    303       ALLOCATE(nlcitl (ijsplt)) 
    304       ALLOCATE(nlcjtl (ijsplt)) 
    305       ALLOCATE(t_ctll (ijsplt)) 
    306       ALLOCATE(s_ctll (ijsplt)) 
    307       ALLOCATE(u_ctll (ijsplt)) 
    308       ALLOCATE(v_ctll (ijsplt)) 
    309       ALLOCATE(ibonitl(ijsplt)) 
    310       ALLOCATE(ibonjtl(ijsplt)) 
     286      ALLOCATE( nlditl(ijsplt) , nleitl(ijsplt) , nimpptl(ijsplt) , ibonitl(ijsplt) ,   & 
     287         &      nldjtl(ijsplt) , nlejtl(ijsplt) , njmpptl(ijsplt) , ibonjtl(ijsplt) ,   & 
     288         &      nlcitl(ijsplt) , t_ctll(ijsplt) , u_ctll (ijsplt) ,                     & 
     289         &      nlcjtl(ijsplt) , s_ctll(ijsplt) , v_ctll (ijsplt)                       ) 
    311290 
    312291      ! Initialization  
    313       t_ctll(:)=0.e0 
    314       s_ctll(:)=0.e0 
    315       u_ctll(:)=0.e0 
    316       v_ctll(:)=0.e0 
     292      t_ctll(:) = 0.e0 
     293      s_ctll(:) = 0.e0 
     294      u_ctll(:) = 0.e0 
     295      v_ctll(:) = 0.e0 
    317296      ktime = 1 
    318297 
     
    345324      ENDIF 
    346325 
    347       ALLOCATE(numid(eind-sind+1)) 
     326      ALLOCATE( numid(eind-sind+1) ) 
    348327 
    349328      DO jn = sind, eind 
     
    3923719003     FORMAT(a20,i4.4,a17,i4.4) 
    3933729004     FORMAT(a11,i4.4,a26,i4.4,a14) 
    394       ENDDO 
    395  
     373      END DO 
     374      ! 
    396375   END SUBROUTINE prt_ctl_init 
    397376 
     
    434413      !!   8.5  !  02-08  (G. Madec)  F90 : free form 
    435414      !!---------------------------------------------------------------------- 
    436       !! * Local variables 
    437415      INTEGER ::   ji, jj, jn               ! dummy loop indices 
    438416      INTEGER ::   & 
     
    443421         nrecil, nrecjl, nldil, nleil, nldjl, nlejl 
    444422 
    445       INTEGER, DIMENSION(:,:), ALLOCATABLE ::   & 
    446          iimpptl, ijmpptl, ilcitl, ilcjtl       ! temporary workspace 
     423      INTEGER, DIMENSION(:,:), ALLOCATABLE ::   iimpptl, ijmpptl, ilcitl, ilcjtl   ! workspace 
    447424      REAL(wp) ::   zidom, zjdom            ! temporary scalars 
    448425      !!---------------------------------------------------------------------- 
     
    564541         nlejtl(jn) = nlejl 
    565542      END DO 
    566  
    567       DEALLOCATE(iimpptl) 
    568       DEALLOCATE(ijmpptl) 
    569       DEALLOCATE(ilcitl) 
    570       DEALLOCATE(ilcjtl) 
    571  
     543      ! 
     544      DEALLOCATE( iimpptl, ijmpptl, ilcitl, ilcjtl ) 
     545      ! 
    572546   END SUBROUTINE sub_dom 
    573547 
     548   !!====================================================================== 
    574549END MODULE prtctl 
Note: See TracChangeset for help on using the changeset viewer.