From 24e9635736878ea1d0fc413a5c18cc48445ff358 Mon Sep 17 00:00:00 2001 From: Wautelet Philippe <waup@aeropc45.aero.obs-mip.fr> Date: Tue, 26 Oct 2021 15:53:23 +0200 Subject: [PATCH] Philippe 26/10/2021: OpenACC: create GT1DFLAT buffer that can be used for any size and shape arrays (logical) --- src/MNH/mode_mnh_zwork.f90 | 276 +++++++++++++++++++++++++++++++++++-- 1 file changed, 261 insertions(+), 15 deletions(-) diff --git a/src/MNH/mode_mnh_zwork.f90 b/src/MNH/mode_mnh_zwork.f90 index 792661a9a..50c16b4b5 100644 --- a/src/MNH/mode_mnh_zwork.f90 +++ b/src/MNH/mode_mnh_zwork.f90 @@ -76,14 +76,39 @@ MODULE MODE_MNH_ZWORK INTEGER,SAVE , ALLOCATABLE, TARGET , DIMENSION(:) :: IT1D_OSIZE + INTEGER, PARAMETER :: JPPOOLSTEP_FLAT = 10 !Number of elements added to the pool when too small + + !------ Logical 1DFLAT pool + INTEGER, PARAMETER :: JPMAX_T1DFLAT_G = 10 !Used to determine max size of buffer GT1DFLAT + !(3D size of the mesh * JPMAX_T1DFLAT_G) + INTEGER, SAVE :: NPMAX_POOL_T1DFLAT_G = 100 !Maximum size of the pool (max number of arrays) + INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: NT1DFLAT_POOL_G !Position in ZT1DFLAT of the beginning of each array + INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: NT1DFLAT_SIZE_G !Size of each array + INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_MAXSIZE_G !Total allocated size of ZT1DFLAT + INTEGER, SAVE :: NT1DFLAT_TOP_G, NT1DFLAT_TOP_G_MAX = 0 !Position in the pool + INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_POS_G, NT1DFLAT_POS_G_MAX = 0 !Position in the array + LOGICAl, SAVE, ALLOCATABLE, TARGET, DIMENSION(:) :: GT1DFLAT + + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_GET_GT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_REL_GT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_GT1DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_GT2DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_GT3DFLAT = 0 + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_GETSIZE_GT1DFLAT = 0 !Sum of all requested sizes in MNH_REL_GT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_GETSIZE_GT2DFLAT = 0 !Sum of all requested sizes in MNH_REL_GT2DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_RELSIZE_GT1DFLAT = 0 !Sum of all released sizes in MNH_REL_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_GT1DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_GT2DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_GT3DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT3DFLAT + + !------ Real 1DFLAT pool INTEGER, PARAMETER :: JPMAX_T1DFLAT_R = 10 !Used to determine max size of buffer ZT1DFLAT !(3D size of the mesh * JPMAX_T1DFLAT_R) - INTEGER, PARAMETER :: JPPOOLSTEP_FLAT = 10 !Number of elements added to the pool when too small INTEGER, SAVE :: NPMAX_POOL_T1DFLAT_R = 100 !Maximum size of the pool (max number of arrays) INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: NT1DFLAT_POOL_R !Position in ZT1DFLAT of the beginning of each array INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: NT1DFLAT_SIZE_R !Size of each array - INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_MAXSIZE !Total allocated size of ZT1DFLAT + INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_MAXSIZE_R !Total allocated size of ZT1DFLAT INTEGER, SAVE :: NT1DFLAT_TOP_R, NT1DFLAT_TOP_R_MAX = 0 !Position in the pool INTEGER(KIND=MNHINT64), SAVE :: NT1DFLAT_POS_R, NT1DFLAT_POS_R_MAX = 0 !Position in the array REAL, SAVE, ALLOCATABLE, TARGET, DIMENSION(:) :: ZT1DFLAT @@ -95,13 +120,17 @@ MODULE MODE_MNH_ZWORK INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_ZT3DFLAT = 0 INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_GETSIZE_ZT1DFLAT = 0 !Sum of all requested sizes in MNH_REL_ZT1DFLAT INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_GETSIZE_ZT2DFLAT = 0 !Sum of all requested sizes in MNH_REL_ZT2DFLAT - INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_RELSIZE_ZT3DFLAT = 0 !Sum of all released sizes in MNH_REL_ZT1DFLAT + INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_RELSIZE_ZT1DFLAT = 0 !Sum of all released sizes in MNH_REL_ZT1DFLAT INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_ZT1DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT1DFLAT INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_ZT2DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT1DFLAT INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NTOT_ALLOCSIZE_ZT3DFLAT = 0 !Sum of all requested sizes in MNH_ALLOCATE_ZT3DFLAT INTERFACE MNH_ALLOCATE_FLAT + MODULE PROCEDURE :: MNH_ALLOCATE_GT1DFLAT_INT32 + MODULE PROCEDURE :: MNH_ALLOCATE_GT1DFLAT_INT64 + MODULE PROCEDURE :: MNH_ALLOCATE_GT2DFLAT + MODULE PROCEDURE :: MNH_ALLOCATE_GT3DFLAT MODULE PROCEDURE :: MNH_ALLOCATE_ZT1DFLAT_INT32 MODULE PROCEDURE :: MNH_ALLOCATE_ZT1DFLAT_INT64 MODULE PROCEDURE :: MNH_ALLOCATE_ZT2DFLAT @@ -232,10 +261,22 @@ CONTAINS NT1D_POOL_I(JI) = JI END DO +!------ Logical 1DFLAT pool + + NT1DFLAT_MAXSIZE_G = INT( IIU, KIND=MNHINT64 ) * IJU * IKU * JPMAX_T1DFLAT_G + ALLOCATE( GT1DFLAT(NT1DFLAT_MAXSIZE_G) ) + !$acc enter data create( GT1DFLAT ) + + ALLOCATE( NT1DFLAT_POOL_G(NPMAX_POOL_T1DFLAT_G) ) + ALLOCATE( NT1DFLAT_SIZE_G(NPMAX_POOL_T1DFLAT_G) ) + NT1DFLAT_POOL_G(:) = NNEGUNDEF + NT1DFLAT_SIZE_G(:) = NNEGUNDEF + NT1DFLAT_TOP_G = 0 + !------ Real 1DFLAT pool - NT1DFLAT_MAXSIZE = INT( IIU, KIND=MNHINT64 ) * IJU * IKU * JPMAX_T1DFLAT_R - ALLOCATE( ZT1DFLAT(NT1DFLAT_MAXSIZE) ) + NT1DFLAT_MAXSIZE_R = INT( IIU, KIND=MNHINT64 ) * IJU * IKU * JPMAX_T1DFLAT_R + ALLOCATE( ZT1DFLAT(NT1DFLAT_MAXSIZE_R) ) !$acc enter data create( ZT1DFLAT ) ALLOCATE( NT1DFLAT_POOL_R(NPMAX_POOL_T1DFLAT_R) ) @@ -260,13 +301,16 @@ CONTAINS IT3D = 0.0 IT1D = 0.0 - GT3D = .FALSE. + GT3D(:,:,:,:) = .FALSE. + GT1DFLAT(:) = .FALSE. !$acc end kernels !$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) !$acc update host (ZUNIT3D) !$acc update host (ZT3D,ZT1D,ZT1DFLAT) + !$acc update host (IT3D, IT1D) + !$acc update host (GT3D, GT1DFLAT) END IF @@ -1001,6 +1045,184 @@ CONTAINS ! End Integer 1D management + !-------- Logical 1DFLAT Pool Managment + + FUNCTION MNH_GET_GT1DFLAT( KSIZE ) RESULT( KINDEX ) + + USE MODD_PARAMETERS, ONLY: NNEGUNDEF + + IMPLICIT NONE + + INTEGER(KIND=MNHINT64), INTENT(IN) :: KSIZE + INTEGER :: KINDEX + + CHARACTER(LEN=32) :: YAVAIL, YMAX, YSIZE + INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: IT1DFLAT_POOL_G + INTEGER(KIND=MNHINT64), ALLOCATABLE, DIMENSION (:) :: IT1DFLAT_SIZE_G + + NCALL_MNH_GET_GT1DFLAT = NCALL_MNH_GET_GT1DFLAT + 1 + NTOT_GETSIZE_GT1DFLAT = NTOT_GETSIZE_GT1DFLAT + KSIZE + + IF ( NT1DFLAT_POS_G + KSIZE > NT1DFLAT_MAXSIZE_G ) THEN + WRITE( YSIZE, '( I0 )' ) KSIZE + WRITE( YAVAIL, '( I0 )' ) NT1DFLAT_MAXSIZE_G - NT1DFLAT_POS_G + WRITE( YMAX, '( I0 )' ) NT1DFLAT_MAXSIZE_G + call Print_msg( NVERB_FATAL, 'GEN', 'MNH_GET_GT1DFLAT', 'GT1DFLAT too small (asked=' // Trim( ysize ) // & + ', available=' // Trim( yavail ) // ', total=' // Trim( ymax ) // ')' ) + ELSE + NT1DFLAT_TOP_G = NT1DFLAT_TOP_G + 1 + KINDEX = NT1DFLAT_TOP_G + + IF ( KINDEX > NPMAX_POOL_T1DFLAT_G ) THEN + WRITE( YSIZE, '( I0 )' ) NPMAX_POOL_T1DFLAT_G + WRITE( YMAX, '( I0 )' ) NPMAX_POOL_T1DFLAT_G+JPPOOLSTEP_FLAT + call Print_msg( NVERB_INFO, 'GEN', 'MNH_GET_GT1DFLAT', 'pool for GT1DFLAT was too small (' // TRIM( YSIZE ) & + // '->' // TRIM( YMAX ) // ')' ) + + ALLOCATE( IT1DFLAT_POOL_G(NPMAX_POOL_T1DFLAT_G+JPPOOLSTEP_FLAT) ) + ALLOCATE( IT1DFLAT_SIZE_G(NPMAX_POOL_T1DFLAT_G+JPPOOLSTEP_FLAT) ) + + IT1DFLAT_POOL_G(1:NPMAX_POOL_T1DFLAT_G) = NT1DFLAT_POOL_G(:) + IT1DFLAT_SIZE_G(1:NPMAX_POOL_T1DFLAT_G) = NT1DFLAT_SIZE_G(:) + IT1DFLAT_POOL_G(NPMAX_POOL_T1DFLAT_G+1:) = NNEGUNDEF + IT1DFLAT_SIZE_G(NPMAX_POOL_T1DFLAT_G+1:) = NNEGUNDEF + + CALL MOVE_ALLOC( FROM = IT1DFLAT_POOL_G, TO = NT1DFLAT_POOL_G ) + CALL MOVE_ALLOC( FROM = IT1DFLAT_SIZE_G, TO = NT1DFLAT_SIZE_G ) + + NPMAX_POOL_T1DFLAT_G = NPMAX_POOL_T1DFLAT_G + JPPOOLSTEP_FLAT + END IF + + NT1DFLAT_POOL_G( KINDEX ) = NT1DFLAT_POS_G + 1 + NT1DFLAT_SIZE_G( KINDEX ) = KSIZE + + NT1DFLAT_POS_G = NT1DFLAT_POS_G + KSIZE + + IF ( NT1DFLAT_TOP_G > NT1DFLAT_TOP_G_MAX ) NT1DFLAT_TOP_G_MAX = NT1DFLAT_TOP_G + IF ( NT1DFLAT_POS_G > NT1DFLAT_POS_G_MAX ) NT1DFLAT_POS_G_MAX = NT1DFLAT_POS_G + END IF + + END FUNCTION MNH_GET_GT1DFLAT + + + SUBROUTINE MNH_REL_GT1DFLAT( KINDEX ) + + USE MODD_PARAMETERS, ONLY: NNEGUNDEF + + IMPLICIT NONE + + INTEGER :: KINDEX + + NCALL_MNH_REL_GT1DFLAT = NCALL_MNH_REL_GT1DFLAT + 1 + + !Release only if last block + IF ( KINDEX /= NT1DFLAT_TOP_G ) & + call Print_msg( NVERB_FATAL, 'GEN', 'MNH_REL_GT1DFLAT', 'trying to release block that is not the last one' ) + + NTOT_RELSIZE_GT1DFLAT = NTOT_RELSIZE_GT1DFLAT + NT1DFLAT_SIZE_G( KINDEX ) + + NT1DFLAT_TOP_G = NT1DFLAT_TOP_G - 1 + NT1DFLAT_POS_G = NT1DFLAT_POS_G - NT1DFLAT_SIZE_G( KINDEX ) + + NT1DFLAT_POOL_G( KINDEX ) = NNEGUNDEF + NT1DFLAT_SIZE_G( KINDEX ) = NNEGUNDEF + + END SUBROUTINE MNH_REL_GT1DFLAT + + + FUNCTION MNH_ALLOCATE_GT1DFLAT_INT32( PTAB, KSIZE ) RESULT( KINDEX ) + + LOGICAL, POINTER, CONTIGUOUS , DIMENSION(:), INTENT(INOUT) :: PTAB + INTEGER(KIND=MNHINT32), INTENT(IN) :: KSIZE + INTEGER :: KINDEX + + kindex = MNH_Allocate_gt1dflat_int64( ptab, Int( ksize, kind = MNHINT64 ) ) + + END FUNCTION MNH_ALLOCATE_GT1DFLAT_INT32 + + + FUNCTION MNH_ALLOCATE_GT1DFLAT_INT64( PTAB, KSIZE ) RESULT( KINDEX ) + + LOGICAL, POINTER, CONTIGUOUS , DIMENSION(:), INTENT(INOUT) :: PTAB + INTEGER(KIND=MNHINT64), INTENT(IN) :: KSIZE + INTEGER :: KINDEX + + NCALL_MNH_ALLOCATE_GT1DFLAT = NCALL_MNH_ALLOCATE_GT1DFLAT + 1 + NTOT_ALLOCSIZE_GT1DFLAT = NTOT_ALLOCSIZE_GT1DFLAT + KSIZE + + kindex = MNH_Get_gt1dflat( ksize ) + ptab(1:KSIZE) => gt1dflat( NT1DFLAT_POOL_G(kindex) : NT1DFLAT_POOL_G(kindex)+ksize-1 ) + + END FUNCTION MNH_ALLOCATE_GT1DFLAT_INT64 + + + FUNCTION MNH_ALLOCATE_GT2DFLAT( PTAB, KIB, KIE, KJB, KJE ) RESULT ( KINDEX ) + + LOGICAL, POINTER, CONTIGUOUS , DIMENSION(:,:), INTENT(INOUT) :: PTAB + INTEGER, INTENT(IN) :: KIB + INTEGER, INTENT(IN) :: KIE + INTEGER, INTENT(IN) :: KJB + INTEGER, INTENT(IN) :: KJE + INTEGER :: KINDEX + + INTEGER(KIND=MNHINT64) :: ISIZE + INTEGER(KIND=MNHINT64) :: IIB, IIE, IJB, IJE + + NCALL_MNH_ALLOCATE_GT2DFLAT = NCALL_MNH_ALLOCATE_GT2DFLAT + 1 + + IIB = KIB + IIE = KIE + IJB = KJB + IJE = KJE + + ISIZE = ( IIE - IIB + 1_MNHINT64 ) * ( IJE - IJB + 1_MNHINT64 ) + + NTOT_ALLOCSIZE_GT2DFLAT = NTOT_ALLOCSIZE_GT2DFLAT + ISIZE + + kindex = MNH_Get_gt1dflat( isize ) + + ptab(KIB:KIE, KJB:KJE) => gt1dflat( NT1DFLAT_POOL_G(kindex) : NT1DFLAT_POOL_G(kindex)+isize-1 ) + + END FUNCTION MNH_ALLOCATE_GT2DFLAT + + + FUNCTION MNH_ALLOCATE_GT3DFLAT( PTAB, KIB, KIE, KJB, KJE, KKB, KKE ) RESULT ( KINDEX ) + + LOGICAL, POINTER, CONTIGUOUS , DIMENSION(:,:,:), INTENT(INOUT) :: PTAB + INTEGER, INTENT(IN) :: KIB + INTEGER, INTENT(IN) :: KIE + INTEGER, INTENT(IN) :: KJB + INTEGER, INTENT(IN) :: KJE + INTEGER, INTENT(IN) :: KKB + INTEGER, INTENT(IN) :: KKE + INTEGER :: KINDEX + + INTEGER(KIND=MNHINT64) :: ISIZE + INTEGER(KIND=MNHINT64) :: IIB, IIE, IJB, IJE, IKB, IKE + + NCALL_MNH_ALLOCATE_GT3DFLAT = NCALL_MNH_ALLOCATE_GT3DFLAT + 1 + + IIB = KIB + IIE = KIE + IJB = KJB + IJE = KJE + IKB = KKB + IKE = KKE + + ISIZE = ( IIE - IIB + 1_MNHINT64 ) * ( IJE - IJB + 1_MNHINT64 ) * ( IKE - IKB + 1_MNHINT64 ) + + NTOT_ALLOCSIZE_GT3DFLAT = NTOT_ALLOCSIZE_GT3DFLAT + ISIZE + + kindex = MNH_Get_gt1dflat( isize ) + + ptab(KIB:KIE, KJB:KJE, KKB:KKE) => gt1dflat( NT1DFLAT_POOL_G(kindex) : NT1DFLAT_POOL_G(kindex)+isize-1 ) + + END FUNCTION MNH_ALLOCATE_GT3DFLAT + + + ! End Logical 1DFLAT management + + !-------- Real 1DFLAT Pool Managment FUNCTION MNH_GET_ZT1DFLAT( KSIZE ) RESULT( KINDEX ) @@ -1019,10 +1241,10 @@ CONTAINS NCALL_MNH_GET_ZT1DFLAT = NCALL_MNH_GET_ZT1DFLAT + 1 NTOT_GETSIZE_ZT1DFLAT = NTOT_GETSIZE_ZT1DFLAT + KSIZE - IF ( NT1DFLAT_POS_R + KSIZE > NT1DFLAT_MAXSIZE ) THEN + IF ( NT1DFLAT_POS_R + KSIZE > NT1DFLAT_MAXSIZE_R ) THEN WRITE( YSIZE, '( I0 )' ) KSIZE - WRITE( YAVAIL, '( I0 )' ) NT1DFLAT_MAXSIZE - NT1DFLAT_POS_R - WRITE( YMAX, '( I0 )' ) NT1DFLAT_MAXSIZE + WRITE( YAVAIL, '( I0 )' ) NT1DFLAT_MAXSIZE_R - NT1DFLAT_POS_R + WRITE( YMAX, '( I0 )' ) NT1DFLAT_MAXSIZE_R call Print_msg( NVERB_FATAL, 'GEN', 'MNH_GET_ZT1DFLAT', 'ZT1DFLAT too small (asked=' // Trim( ysize ) // & ', available=' // Trim( yavail ) // ', total=' // Trim( ymax ) // ')' ) ELSE @@ -1075,7 +1297,7 @@ CONTAINS IF ( KINDEX /= NT1DFLAT_TOP_R ) & call Print_msg( NVERB_FATAL, 'GEN', 'MNH_REL_ZT1DFLAT', 'trying to release block that is not the last one' ) - NTOT_RELSIZE_ZT3DFLAT = NTOT_RELSIZE_ZT3DFLAT + NT1DFLAT_SIZE_R( KINDEX ) + NTOT_RELSIZE_ZT1DFLAT = NTOT_RELSIZE_ZT1DFLAT + NT1DFLAT_SIZE_R( KINDEX ) NT1DFLAT_TOP_R = NT1DFLAT_TOP_R - 1 NT1DFLAT_POS_R = NT1DFLAT_POS_R - NT1DFLAT_SIZE_R( KINDEX ) @@ -1181,7 +1403,31 @@ CONTAINS SUBROUTINE PRINT_FLATPOOL_STATS() - cmnhmsg(1) = 'Number of calls for real flat pool:' + cmnhmsg(1) = 'LOGICAL flat pool: Number of calls:' + Write( cmnhmsg(2), "( ' MNH_GET_GT1DFLAT = ', I20 )" ) NCALL_MNH_GET_GT1DFLAT + Write( cmnhmsg(3), "( ' MNH_ALLOCATE_GT1DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_GT1DFLAT + Write( cmnhmsg(4), "( ' MNH_ALLOCATE_GT2DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_GT2DFLAT + Write( cmnhmsg(5), "( ' MNH_ALLOCATE_GT3DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_GT3DFLAT + Write( cmnhmsg(6), "( ' MNH_REL_GT1DFLAT = ', I20 )" ) NCALL_MNH_REL_GT1DFLAT + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + cmnhmsg(1) = 'LOGICAL flat pool: Maximum sizes:' + Write( cmnhmsg(2), "( ' Entries (current / max used / max avail) = ', I10, '/', I10, '/', I10, & + ' (max is automatically increased if necessary)' )" ) NT1DFLAT_TOP_G, NT1DFLAT_TOP_G_MAX, NPMAX_POOL_T1DFLAT_G + Write( cmnhmsg(3), "( ' Memory (current / max used / max avail) = ', I20, '/', I20, '/', I20 )" ) & + NT1DFLAT_POS_G, NT1DFLAT_POS_G_MAX, NT1DFLAT_MAXSIZE_G + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + cmnhmsg(1) = 'LOGICAL flat pool: Total provided and released sizes (in bytes):' + Write( cmnhmsg(2), "( ' Provided = ', I20 )" ) NTOT_GETSIZE_GT1DFLAT + Write( cmnhmsg(3), "( ' 1D = ', I20 )" ) NTOT_ALLOCSIZE_GT1DFLAT + Write( cmnhmsg(4), "( ' 2D = ', I20 )" ) NTOT_ALLOCSIZE_GT2DFLAT + Write( cmnhmsg(5), "( ' 3D = ', I20 )" ) NTOT_ALLOCSIZE_GT3DFLAT + Write( cmnhmsg(6), "( ' Released = ', I20 )" ) NTOT_RELSIZE_GT1DFLAT + call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) + + + cmnhmsg(1) = 'REAL flat pool: Number of calls:' Write( cmnhmsg(2), "( ' MNH_GET_ZT1DFLAT = ', I20 )" ) NCALL_MNH_GET_ZT1DFLAT Write( cmnhmsg(3), "( ' MNH_ALLOCATE_ZT1DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT1DFLAT Write( cmnhmsg(4), "( ' MNH_ALLOCATE_ZT2DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT2DFLAT @@ -1189,19 +1435,19 @@ CONTAINS Write( cmnhmsg(6), "( ' MNH_REL_ZT1DFLAT = ', I20 )" ) NCALL_MNH_REL_ZT1DFLAT call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) - cmnhmsg(1) = 'Maximum sizes for real flat pool:' + cmnhmsg(1) = 'REAL flat pool: Maximum sizes:' Write( cmnhmsg(2), "( ' Entries (current / max used / max avail) = ', I10, '/', I10, '/', I10, & ' (max is automatically increased if necessary)' )" ) NT1DFLAT_TOP_R, NT1DFLAT_TOP_R_MAX, NPMAX_POOL_T1DFLAT_R Write( cmnhmsg(3), "( ' Memory (current / max used / max avail) = ', I20, '/', I20, '/', I20 )" ) & - NT1DFLAT_POS_R, NT1DFLAT_POS_R_MAX, NT1DFLAT_MAXSIZE + NT1DFLAT_POS_R, NT1DFLAT_POS_R_MAX, NT1DFLAT_MAXSIZE_R call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) - cmnhmsg(1) = 'Total provided and released sizes for real flat pool (in bytes):' + cmnhmsg(1) = 'REAL flat pool: Total provided and released sizes (in bytes):' Write( cmnhmsg(2), "( ' Provided = ', I20 )" ) NTOT_GETSIZE_ZT1DFLAT Write( cmnhmsg(3), "( ' 1D = ', I20 )" ) NTOT_ALLOCSIZE_ZT1DFLAT Write( cmnhmsg(4), "( ' 2D = ', I20 )" ) NTOT_ALLOCSIZE_ZT2DFLAT Write( cmnhmsg(5), "( ' 3D = ', I20 )" ) NTOT_ALLOCSIZE_ZT3DFLAT - Write( cmnhmsg(6), "( ' Released = ', I20 )" ) NTOT_RELSIZE_ZT3DFLAT + Write( cmnhmsg(6), "( ' Released = ', I20 )" ) NTOT_RELSIZE_ZT1DFLAT call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' ) END SUBROUTINE PRINT_FLATPOOL_STATS -- GitLab