From ebf3469d7161fc0899b2a703d1cf313b7bb8bb86 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 8 Dec 2021 15:45:11 +0100
Subject: [PATCH] Philippe 08/12/2021: OpenACC: add mppdb_check + coordinate
 changes between MNH and ZSOLVER

---
 src/MNH/mass_leak.f90     | 39 +++++++++++++++++++++++++----------
 src/MNH/pressurez.f90     | 43 +++++++++++++++++++++++++++++++++++++++
 src/ZSOLVER/mass_leak.f90 | 31 +++++++++++++++++++++-------
 src/ZSOLVER/pressurez.f90 | 37 +++++++++++++++++++++++++++++++++
 4 files changed, 132 insertions(+), 18 deletions(-)

diff --git a/src/MNH/mass_leak.f90 b/src/MNH/mass_leak.f90
index c5dc3e31e..20faa17c6 100644
--- a/src/MNH/mass_leak.f90
+++ b/src/MNH/mass_leak.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 solver 2006/05/18 14:41:09
-!-----------------------------------------------------------------
 !####################
 MODULE MODI_MASS_LEAK
 !####################
@@ -108,6 +103,7 @@ END MODULE MODI_MASS_LEAK
 USE MODD_PARAMETERS
 !
 USE MODE_ll
+USE MODE_MPPDB
 !JUAN
 USE MODE_REPRO_SUM
 !JUAN
@@ -147,8 +143,18 @@ INTEGER             :: JJ         ! Loop index in y direction
 INTEGER             :: JK         ! Loop index in z direction
 !
 INTEGER             :: IINFO_ll   ! return code of parallel routine
+REAL    :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N
 
 !
+IF (MPPDB_INITIALIZED) THEN
+  !Check all IN arrays
+  CALL MPPDB_CHECK(PDXX,  "MASS_LEAK beg:PDXX")
+  CALL MPPDB_CHECK(PDYY,  "MASS_LEAK beg:PDYY")
+  CALL MPPDB_CHECK(PRHODJ,"MASS_LEAK beg:PRHODJ")
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"MASS_LEAK beg:PRUS")
+  CALL MPPDB_CHECK(PRVS,"MASS_LEAK beg:PRVS")
+END IF
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
@@ -166,6 +172,10 @@ IKE = SIZE(PRUS,3) - JPVEXT
 !              -------------------
 !
 ZLEAK=0.
+ZLEAK_E=0.
+ZLEAK_W=0.
+ZLEAK_S=0.
+ZLEAK_N=0.
 !
 IF( HLBCX(1) /= 'CYCL' ) THEN
    ALLOCATE( ZLEAK_W_2D(IIB:IIB,IJB:IJE))
@@ -177,7 +187,6 @@ IF( HLBCX(1) /= 'CYCL' ) THEN
          END DO
       END DO      
    END IF
-   ZLEAK =         SUM_DD_R2_ll(ZLEAK_W_2D)
 !
   ALLOCATE( ZLEAK_E_2D(IIE+1:IIE+1,IJB:IJE))
   ZLEAK_E_2D = 0.0
@@ -188,8 +197,9 @@ IF( HLBCX(1) /= 'CYCL' ) THEN
         END DO
      END DO
   END IF
-  ZLEAK = ZLEAK + SUM_DD_R2_ll(ZLEAK_E_2D)  
 !
+   ZLEAK_W = SUM_DD_R2_ll(ZLEAK_W_2D)
+   ZLEAK_E = SUM_DD_R2_ll(ZLEAK_E_2D)
 END IF
 !
 IF( HLBCY(1) /= 'CYCL' ) THEN
@@ -202,7 +212,6 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
          END DO
       END DO
    END IF
-   ZLEAK = ZLEAK + SUM_DD_R2_ll(ZLEAK_S_2D)  
    !
    ALLOCATE( ZLEAK_N_2D(IIB:IIE,IJE+1:IJE+1))  
    ZLEAK_N_2D = 0.0
@@ -213,10 +222,13 @@ IF( HLBCY(1) /= 'CYCL' ) THEN
          END DO
       END DO
    END IF
-   ZLEAK = ZLEAK + SUM_DD_R2_ll(ZLEAK_N_2D)  
    !
+   ZLEAK_S = SUM_DD_R2_ll(ZLEAK_S_2D)
+   ZLEAK_N = SUM_DD_R2_ll(ZLEAK_N_2D)
 END IF
 !
+ZLEAK = ZLEAK_E + ZLEAK_W + ZLEAK_S + ZLEAK_N
+!
 !CALL REDUCESUM_ll(ZLEAK,IINFO_ll)	! we do the reducesum_ll in SUM_DD_R2_ll so we do not do it here
 !
 !-------------------------------------------------------------------------------
@@ -241,6 +253,11 @@ IF (HLBCY(2)=='OPEN' .AND. LNORTH_ll() ) &
 !
 !
 !
+IF (MPPDB_INITIALIZED) THEN
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"MASS_LEAK end:PRUS")
+  CALL MPPDB_CHECK(PRVS,"MASS_LEAK end:PRVS")
+END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE MASS_LEAK
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index e9d0240e7..86cbcf51f 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -247,6 +247,9 @@ USE MODE_MPPDB
 USE MODE_MSG
 USE MODE_SUM2_ll,     ONLY: GMAXLOC_ll
 !
+#ifdef MNH_BITREP
+USE MODI_BITREP
+#endif
 USE MODI_CONJGRAD
 USE MODI_CONRESOL
 USE MODI_CONRESOLZ
@@ -383,6 +386,35 @@ INTEGER :: IIMAX_ll,IJMAX_ll
 !
 !
 !------------------------------------------------------------------------------
+IF (MPPDB_INITIALIZED) THEN
+  !Check all IN arrays
+  CALL MPPDB_CHECK(PRHODJ,"PRESSUREZ beg:PRHODJ")
+  CALL MPPDB_CHECK(PDXX,"PRESSUREZ beg:PDXX")
+  CALL MPPDB_CHECK(PDYY,"PRESSUREZ beg:PDYY")
+  CALL MPPDB_CHECK(PDZZ,"PRESSUREZ beg:PDZZ")
+  CALL MPPDB_CHECK(PDZX,"PRESSUREZ beg:PDZX")
+  CALL MPPDB_CHECK(PRHOT,"PRESSUREZ beg:PRHOT")
+  CALL MPPDB_CHECK(PAF,"PRESSUREZ beg:PAF")
+  CALL MPPDB_CHECK(PCF,"PRESSUREZ beg:PCF")
+  CALL MPPDB_CHECK(PBF,"PRESSUREZ beg:PBF")
+  CALL MPPDB_CHECK(PTRIGSX,"PRESSUREZ beg:PTRIGSX")
+  CALL MPPDB_CHECK(PTRIGSY,"PRESSUREZ beg:PTRIGSY")
+  CALL MPPDB_CHECK(KIFAXX,"PRESSUREZ beg:KIFAXX")
+  CALL MPPDB_CHECK(KIFAXY,"PRESSUREZ beg:KIFAXY")
+  CALL MPPDB_CHECK(PTHT,"PRESSUREZ beg:PTHT")
+  CALL MPPDB_CHECK(PRT,"PRESSUREZ beg:PRT")
+  CALL MPPDB_CHECK(PRHODREF,"PRESSUREZ beg:PRHODREF")
+  CALL MPPDB_CHECK(PTHVREF,"PRESSUREZ beg:PTHVREF")
+  CALL MPPDB_CHECK(PRVREF,"PRESSUREZ beg:PRVREF")
+  CALL MPPDB_CHECK(PEXNREF,"PRESSUREZ beg:PEXNREF")
+  CALL MPPDB_CHECK(PBFB,"PRESSUREZ beg:PBFB")
+  CALL MPPDB_CHECK(PBF_SXP2_YP1_Z,"PRESSUREZ beg:PBF_SXP2_YP1_Z")
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"PRESSUREZ beg:PRUS")
+  CALL MPPDB_CHECK(PRVS,"PRESSUREZ beg:PRVS")
+  CALL MPPDB_CHECK(PRWS,"PRESSUREZ beg:PRWS")
+  CALL MPPDB_CHECK(PPABST,"PRESSUREZ beg:PPABST")
+END IF
 !-------------------------------------------------------------------------------
 !
 !*       1.      PRELIMINARIES
@@ -514,7 +546,11 @@ IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN
     ENDWHERE 
   ENDIF
   !
+#ifndef MNH_BITREP
   ZPHIT(:,:,:)=(PPABST(:,:,:)/XP00)**(XRD/XCPD)-PEXNREF(:,:,:)
+#else
+  ZPHIT(:,:,:)=BR_POW(PPABST(:,:,:)/XP00,XRD/XCPD)-PEXNREF(:,:,:)
+#endif
   !
 ELSEIF(CEQNSYS=='LHE') THEN
   IF ( .NOT. LOCEAN) THEN
@@ -860,6 +896,13 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 !
 END IF
 !
+IF (MPPDB_INITIALIZED) THEN
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"PRESSUREZ end:PRUS")
+  CALL MPPDB_CHECK(PRVS,"PRESSUREZ end:PRVS")
+  CALL MPPDB_CHECK(PRWS,"PRESSUREZ end:PRWS")
+  CALL MPPDB_CHECK(PPABST,"PRESSUREZ end:PPABST")
+END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE PRESSUREZ
diff --git a/src/ZSOLVER/mass_leak.f90 b/src/ZSOLVER/mass_leak.f90
index 6a6b7206d..bb0dd5ae9 100644
--- a/src/ZSOLVER/mass_leak.f90
+++ b/src/ZSOLVER/mass_leak.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 solver 2006/05/18 14:41:09
-!-----------------------------------------------------------------
 !####################
 MODULE MODI_MASS_LEAK
 !####################
@@ -108,6 +103,7 @@ END MODULE MODI_MASS_LEAK
 USE MODD_PARAMETERS
 !
 USE MODE_ll
+USE MODE_MPPDB
 !JUAN
 USE MODE_REPRO_SUM
 !JUAN
@@ -152,6 +148,19 @@ LOGICAL :: GWEST,GEAST,GSOUTH,GNORTH
 REAL    :: ZLEAK_W,ZLEAK_E,ZLEAK_S,ZLEAK_N
 !
 LOGICAL , SAVE :: GFIRST_CALL_MASS_LEAK = .TRUE.
+
+
+!$acc data present( PDXX, PDYY, PRHODJ, PRUS, PRVS )
+
+IF (MPPDB_INITIALIZED) THEN
+  !Check all IN arrays
+  CALL MPPDB_CHECK(PDXX,  "MASS_LEAK beg:PDXX")
+  CALL MPPDB_CHECK(PDYY,  "MASS_LEAK beg:PDYY")
+  CALL MPPDB_CHECK(PRHODJ,"MASS_LEAK beg:PRHODJ")
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"MASS_LEAK beg:PRUS")
+  CALL MPPDB_CHECK(PRVS,"MASS_LEAK beg:PRVS")
+END IF
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
@@ -289,6 +298,14 @@ END IF
 !$acc wait
 !
 !
+IF (MPPDB_INITIALIZED) THEN
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"MASS_LEAK end:PRUS")
+  CALL MPPDB_CHECK(PRVS,"MASS_LEAK end:PRVS")
+END IF
+
+!$acc end data
+
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE MASS_LEAK
diff --git a/src/ZSOLVER/pressurez.f90 b/src/ZSOLVER/pressurez.f90
index 67ee08c9f..32ec521e8 100644
--- a/src/ZSOLVER/pressurez.f90
+++ b/src/ZSOLVER/pressurez.f90
@@ -434,6 +434,35 @@ LOGICAL :: GSOUTH2D,GNORTH2D,GPRVREF0
 LOGICAL, SAVE :: GFIRST_CALL_PRESSUREZ = .TRUE.
 !
 !------------------------------------------------------------------------------
+IF (MPPDB_INITIALIZED) THEN
+  !Check all IN arrays
+  CALL MPPDB_CHECK(PRHODJ,"PRESSUREZ beg:PRHODJ")
+  CALL MPPDB_CHECK(PDXX,"PRESSUREZ beg:PDXX")
+  CALL MPPDB_CHECK(PDYY,"PRESSUREZ beg:PDYY")
+  CALL MPPDB_CHECK(PDZZ,"PRESSUREZ beg:PDZZ")
+  CALL MPPDB_CHECK(PDZX,"PRESSUREZ beg:PDZX")
+  CALL MPPDB_CHECK(PRHOT,"PRESSUREZ beg:PRHOT")
+  CALL MPPDB_CHECK(PAF,"PRESSUREZ beg:PAF")
+  CALL MPPDB_CHECK(PCF,"PRESSUREZ beg:PCF")
+  CALL MPPDB_CHECK(PBF,"PRESSUREZ beg:PBF")
+  CALL MPPDB_CHECK(PTRIGSX,"PRESSUREZ beg:PTRIGSX")
+  CALL MPPDB_CHECK(PTRIGSY,"PRESSUREZ beg:PTRIGSY")
+  CALL MPPDB_CHECK(KIFAXX,"PRESSUREZ beg:KIFAXX")
+  CALL MPPDB_CHECK(KIFAXY,"PRESSUREZ beg:KIFAXY")
+  CALL MPPDB_CHECK(PTHT,"PRESSUREZ beg:PTHT")
+  CALL MPPDB_CHECK(PRT,"PRESSUREZ beg:PRT")
+  CALL MPPDB_CHECK(PRHODREF,"PRESSUREZ beg:PRHODREF")
+  CALL MPPDB_CHECK(PTHVREF,"PRESSUREZ beg:PTHVREF")
+  CALL MPPDB_CHECK(PRVREF,"PRESSUREZ beg:PRVREF")
+  CALL MPPDB_CHECK(PEXNREF,"PRESSUREZ beg:PEXNREF")
+  CALL MPPDB_CHECK(PBFB,"PRESSUREZ beg:PBFB")
+  CALL MPPDB_CHECK(PBF_SXP2_YP1_Z,"PRESSUREZ beg:PBF_SXP2_YP1_Z")
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"PRESSUREZ beg:PRUS")
+  CALL MPPDB_CHECK(PRVS,"PRESSUREZ beg:PRVS")
+  CALL MPPDB_CHECK(PRWS,"PRESSUREZ beg:PRWS")
+  CALL MPPDB_CHECK(PPABST,"PRESSUREZ beg:PPABST")
+END IF
 !-------------------------------------------------------------------------------
 !
 !*       1.      PRELIMINARIES
@@ -1060,6 +1089,14 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 !$acc wait  
 !
 END IF
+
+IF (MPPDB_INITIALIZED) THEN
+  !Check all INOUT arrays
+  CALL MPPDB_CHECK(PRUS,"PRESSUREZ end:PRUS")
+  CALL MPPDB_CHECK(PRVS,"PRESSUREZ end:PRVS")
+  CALL MPPDB_CHECK(PRWS,"PRESSUREZ end:PRWS")
+  CALL MPPDB_CHECK(PPABST,"PRESSUREZ end:PPABST")
+END IF
 !
 #ifndef MNH_OPENACC
 deallocate( ZDV_SOURCE )
-- 
GitLab