From 52c3ff644ea4f01f90077b820cd0fe4f7c99becd Mon Sep 17 00:00:00 2001
From: Wautelet Philippe <waup@aeropc45.aero.obs-mip.fr>
Date: Tue, 26 Oct 2021 09:44:10 +0200
Subject: [PATCH] Philippe 26/10/2021: OpenACC: add support for 2D arrays in
 real flat pool

---
 src/MNH/mode_mnh_zwork.f90 | 48 +++++++++++++++++++++++++++++++++-----
 1 file changed, 42 insertions(+), 6 deletions(-)

diff --git a/src/MNH/mode_mnh_zwork.f90 b/src/MNH/mode_mnh_zwork.f90
index 6f6189054..792661a9a 100644
--- a/src/MNH/mode_mnh_zwork.f90
+++ b/src/MNH/mode_mnh_zwork.f90
@@ -91,16 +91,20 @@ MODULE MODE_MNH_ZWORK
   INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_GET_ZT1DFLAT      = 0
   INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_REL_ZT1DFLAT      = 0
   INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_ZT1DFLAT = 0
+  INTEGER(KIND=MNHINT64), PRIVATE, SAVE :: NCALL_MNH_ALLOCATE_ZT2DFLAT = 0
   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_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_ZT1DFLAT_INT32
     MODULE PROCEDURE :: MNH_ALLOCATE_ZT1DFLAT_INT64
+    MODULE PROCEDURE :: MNH_ALLOCATE_ZT2DFLAT
     MODULE PROCEDURE :: MNH_ALLOCATE_ZT3DFLAT
   END INTERFACE MNH_ALLOCATE_FLAT
 
@@ -1108,6 +1112,36 @@ CONTAINS
   END FUNCTION MNH_ALLOCATE_ZT1DFLAT_INT64
 
 
+  FUNCTION MNH_ALLOCATE_ZT2DFLAT( PTAB, KIB, KIE, KJB, KJE ) RESULT ( KINDEX )
+
+    REAL, 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_ZT2DFLAT = NCALL_MNH_ALLOCATE_ZT2DFLAT + 1
+
+    IIB = KIB
+    IIE = KIE
+    IJB = KJB
+    IJE = KJE
+
+    ISIZE = ( IIE - IIB + 1_MNHINT64 ) * ( IJE - IJB + 1_MNHINT64 )
+
+    NTOT_ALLOCSIZE_ZT2DFLAT = NTOT_ALLOCSIZE_ZT2DFLAT + ISIZE
+
+    kindex = MNH_Get_zt1dflat( isize )
+
+    ptab(KIB:KIE, KJB:KJE) => zt1dflat( NT1DFLAT_POOL_R(kindex) : NT1DFLAT_POOL_R(kindex)+isize-1 )
+
+  END FUNCTION MNH_ALLOCATE_ZT2DFLAT
+
+
   FUNCTION MNH_ALLOCATE_ZT3DFLAT( PTAB, KIB, KIE, KJB, KJE, KKB, KKE ) RESULT ( KINDEX )
 
     REAL, POINTER, CONTIGUOUS , DIMENSION(:,:,:), INTENT(INOUT) :: PTAB
@@ -1148,10 +1182,11 @@ CONTAINS
   SUBROUTINE PRINT_FLATPOOL_STATS()
 
     cmnhmsg(1) = 'Number of calls for real flat pool:'
-    Write( cmnhmsg(2), "( '  MNH_GET_ZT1DFLAT      = ', I20 )" ) NCALL_MNH_GET_ZT1DFLAT
-    Write( cmnhmsg(3), "( '  MNH_REL_ZT1DFLAT      = ', I20 )" ) NCALL_MNH_REL_ZT1DFLAT
-    Write( cmnhmsg(4), "( '  MNH_ALLOCATE_ZT1DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT1DFLAT
-    Write( cmnhmsg(5), "( '  MNH_ALLOCATE_ZT3DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT3DFLAT
+    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
+    Write( cmnhmsg(5), "( '    MNH_ALLOCATE_ZT3DFLAT = ', I20 )" ) NCALL_MNH_ALLOCATE_ZT3DFLAT
+    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:'
@@ -1164,8 +1199,9 @@ CONTAINS
     cmnhmsg(1) = 'Total provided and released sizes for real flat pool (in bytes):'
     Write( cmnhmsg(2), "( '  Provided = ', I20 )" ) NTOT_GETSIZE_ZT1DFLAT
     Write( cmnhmsg(3), "( '    1D     = ', I20 )" ) NTOT_ALLOCSIZE_ZT1DFLAT
-    Write( cmnhmsg(4), "( '    3D     = ', I20 )" ) NTOT_ALLOCSIZE_ZT3DFLAT
-    Write( cmnhmsg(5), "( '  Released = ', I20 )" ) NTOT_RELSIZE_ZT3DFLAT
+    Write( cmnhmsg(4), "( '    2D     = ', I20 )" ) NTOT_ALLOCSIZE_ZT2DFLAT
+    Write( cmnhmsg(5), "( '    3D     = ', I20 )" ) NTOT_ALLOCSIZE_ZT3DFLAT
+    Write( cmnhmsg(6), "( '  Released = ', I20 )" ) NTOT_RELSIZE_ZT3DFLAT
     call Print_msg( NVERB_INFO, 'GEN', 'FLAT_STATS' )
 
   END SUBROUTINE PRINT_FLATPOOL_STATS
-- 
GitLab