From 1789949e58ff17ecaea6d61f8c004e79cc90f683 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Wed, 23 Nov 2016 17:01:06 +0100
Subject: [PATCH] Juan & C.Lac 23/11/2016: suite reproducibility , add
 PTSTEP_PPM

---
 src/MNH/advec_ppm_algo.f90  | 50 +++++++++++++++++++------------------
 src/MNH/advection_metsv.f90 |  6 ++---
 src/MNH/ppm_met.f90         | 16 ++++++------
 src/MNH/ppm_scalar.f90      | 30 +++++++++++-----------
 4 files changed, 54 insertions(+), 48 deletions(-)

diff --git a/src/MNH/advec_ppm_algo.f90 b/src/MNH/advec_ppm_algo.f90
index 5bbeadcee..b7eb4415f 100644
--- a/src/MNH/advec_ppm_algo.f90
+++ b/src/MNH/advec_ppm_algo.f90
@@ -14,8 +14,8 @@
 !
 INTERFACE
 !
-      SUBROUTINE  ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, &
-                                 PRHODJ, PTSTEP, &
+      SUBROUTINE  ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT,&
+                                 PRHODJ, PTSTEP, PTSTEP_PPM,                   &
                                  PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,&
                                  PSRC,  TPDTCUR, PCRU, PCRV, PCRW)
 !
@@ -34,7 +34,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ  ! density
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOX1, PRHOX2
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOY1, PRHOY2
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOZ1, PRHOZ2
-REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
+REAL,                   INTENT(IN)  :: PTSTEP ! Time step model  
+REAL,                   INTENT(IN)  :: PTSTEP_PPM ! Time Step PPM
 TYPE (DATE_TIME),       INTENT(IN)  :: TPDTCUR ! current date and time
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC    ! source term after advection
@@ -48,7 +49,7 @@ END MODULE MODI_ADVEC_PPM_ALGO
 !
 !     ##########################################################################
       SUBROUTINE  ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, &
-                                 PRHODJ, PTSTEP, &
+                                 PRHODJ, PTSTEP, PTSTEP_PPM,                   &
                                  PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,&
                                  PSRC, TPDTCUR, PCRU, PCRV, PCRW)
 !     ##########################################################################
@@ -101,7 +102,8 @@ REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ  ! density
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOX1, PRHOX2
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOY1, PRHOY2
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOZ1, PRHOZ2
-REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
+REAL,                   INTENT(IN)  :: PTSTEP ! Time step model  
+REAL,                   INTENT(IN)  :: PTSTEP_PPM ! Time Step PPM
 TYPE (DATE_TIME),       INTENT(IN)  :: TPDTCUR ! current date and time
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC    ! source term after advection
@@ -137,19 +139,19 @@ CASE('PPM_00')
 !*       1.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP)
+      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP_PPM)
       PSRC = PSRC / PRHOX1
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP)
+      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP_PPM)
       PSRC = PSRC / PRHOY1
 !
 !*       3.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP)
+      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ1
 !
    ELSE
@@ -158,19 +160,19 @@ CASE('PPM_00')
 !*       1.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP)
+      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ2
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP)
+      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP_PPM)
       PSRC = PSRC / PRHOY2
 !
 !*       3.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP)
+      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP_PPM)
       PSRC = PSRC / PRHOX2
 !
    END IF
@@ -185,21 +187,21 @@ CASE('PPM_01')
 !               ------------------------
 !
       PSRC = (PSRC * PRHODJ) - &
-           PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP)
+           PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP_PPM)
       PSRC = PSRC / PRHOX1
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
       PSRC = (PSRC * PRHOX1) - &
-           PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP)
+           PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP_PPM)
       PSRC = PSRC / PRHOY1
 !
 !*       3.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
       PSRC = (PSRC * PRHOY1) - &
-           PPM_01_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP)
+           PPM_01_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ1
 !
    ELSE
@@ -208,21 +210,21 @@ CASE('PPM_01')
 !               ------------------------
 !
       PSRC = (PSRC * PRHODJ) - &
-           PPM_01_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP)
+           PPM_01_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ2
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
       PSRC = (PSRC * PRHOZ2) - &
-           PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP)
+           PPM_01_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP_PPM)
       PSRC = PSRC / PRHOY2
 !
 !*       3.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
       PSRC = (PSRC * PRHOY2) - &
-           PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP)
+           PPM_01_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP_PPM)
       PSRC = PSRC / PRHOX2
 !
    END IF
@@ -236,19 +238,19 @@ CASE('PPM_02')
 !*       1.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PRHOX1, PTSTEP)
+      PSRC = PPM_S1_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PRHOX1, PTSTEP_PPM)
       PSRC = PSRC / PRHOX1
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PRHOY1, PTSTEP)
+      PSRC = PPM_S1_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PRHOY1, PTSTEP_PPM)
       PSRC = PSRC / PRHOY1
 !
 !*       3.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_Z(KGRID, PSRC, PCRW, PRHOY1, PRHOZ1, PTSTEP)
+      PSRC = PPM_S1_Z(KGRID, PSRC, PCRW, PRHOY1, PRHOZ1, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ1
 !
    ELSE
@@ -256,19 +258,19 @@ CASE('PPM_02')
 !*       1.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_Z(KGRID, PSRC, PCRW, PRHODJ, PRHOZ2, PTSTEP)
+      PSRC = PPM_S1_Z(KGRID, PSRC, PCRW, PRHODJ, PRHOZ2, PTSTEP_PPM)
       PSRC = PSRC / PRHOZ2
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PRHOY2, PTSTEP)
+      PSRC = PPM_S1_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PRHOY2, PTSTEP_PPM)
       PSRC = PSRC / PRHOY2
 !
 !*       3.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S1_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PRHOX2, PTSTEP)
+      PSRC = PPM_S1_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PRHOX2, PTSTEP_PPM)
       PSRC = PSRC / PRHOX2
 !
    END IF
@@ -283,6 +285,6 @@ END SELECT
 ! compatible to the rest of the model forcings, we need to substract the
 ! initial field, devide by dt and muliplty by RHODJ
 !
-PSRC = (PSRC - PFIELDT)*PRHODJ/PTSTEP
+PSRC = (PSRC - PFIELDT)*PRHODJ/PTSTEP_PPM
 !
 END SUBROUTINE ADVEC_PPM_ALGO
diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 46158951e..06d689904 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -479,12 +479,12 @@ DO JSPL=1,KSPLIT
    !IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.
 !
    IF (LNEUTRAL) ZTH=ZTH-PTHVREF  !* To be removed with the new PPM scheme ?
-   CALL PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,ZRUCPPM, ZRVCPPM, ZRWCPPM, ZTSTEP_PPM,    &
-              PRHODJ,  ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  ZRHOZ1, ZRHOZ2,              &
+   CALL PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,ZRUCPPM, ZRVCPPM, ZRWCPPM, PTSTEP,ZTSTEP_PPM, &
+              PRHODJ,  ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  ZRHOZ1, ZRHOZ2,                  &
               ZTH, ZTKE, ZR, ZRTHS_PPM, ZRTKES_PPM, ZRRS_PPM, HMET_ADV_SCHEME)
    IF (LNEUTRAL) ZTH=ZTH+PTHVREF  !* To be removed with the new PPM scheme ?
 !
-   CALL PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR, ZRUCPPM, ZRVCPPM, ZRWCPPM,             &
+   CALL PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR, ZRUCPPM, ZRVCPPM, ZRWCPPM, PTSTEP,     &
                  ZTSTEP_PPM, PRHODJ, ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2,  ZRHOZ1, ZRHOZ2, &
                  ZSV, ZRSVS_PPM, HSV_ADV_SCHEME                                       )
 !
diff --git a/src/MNH/ppm_met.f90 b/src/MNH/ppm_met.f90
index 1e6401664..d97e2fd93 100644
--- a/src/MNH/ppm_met.f90
+++ b/src/MNH/ppm_met.f90
@@ -10,7 +10,7 @@
 INTERFACE
 !
       SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,              &
-                          PCRU, PCRV, PCRW, PTSTEP, PRHODJ,       &
+                          PCRU, PCRV, PCRW, PTSTEP,PTSTEP_PPM, PRHODJ, &
                           PRHOX1, PRHOX2, PRHOY1, PRHOY2,         &
                           PRHOZ1, PRHOZ2, PTHT, PTKET, PRT,       &
                           PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME    )
@@ -33,7 +33,8 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOX1,PRHOX2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOY1,PRHOY2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOZ1,PRHOZ2
 !
-REAL,                     INTENT(IN)    :: PTSTEP ! Single Time step 
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step model  
+REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET        ! Vars at t
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
@@ -49,7 +50,7 @@ END MODULE MODI_PPM_MET
 !
 !     ######################################################################
       SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,              &
-                          PCRU, PCRV, PCRW, PTSTEP, PRHODJ,       &
+                          PCRU, PCRV, PCRW, PTSTEP,PTSTEP_PPM, PRHODJ, &
                           PRHOX1, PRHOX2, PRHOY1, PRHOY2,         &
                           PRHOZ1, PRHOZ2, PTHT, PTKET, PRT,       &
                           PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME    )
@@ -124,7 +125,8 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOX1,PRHOX2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOY1,PRHOY2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOZ1,PRHOZ2
 !
-REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step model  
+REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET ! Vars at t
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
@@ -158,7 +160,7 @@ IGRID = 1
 ! Potential temperature
 !
 CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, &
-                    PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
+                    PTSTEP_PPM,PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
                     PRTHS, TPDTCUR, PCRU, PCRV, PCRW)
 !
 !
@@ -166,7 +168,7 @@ CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP,
 !
 IF (GTKEALLOC) THEN
    CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTKET,PRHODJ,PTSTEP, &
-                       PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
+                       PTSTEP_PPM,PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
                        PRTKES, TPDTCUR, PCRU, PCRV, PCRW)
 !
 !
@@ -178,7 +180,7 @@ END IF
 !
 DO JRR=1,KRR
    CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID,           &
-                       PRT(:,:,:,JRR), PRHODJ, PTSTEP,                 &
+                       PRT(:,:,:,JRR), PRHODJ, PTSTEP, PTSTEP_PPM,     &
                        PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
                        PRRS(:,:,:,JRR), TPDTCUR, PCRU, PCRV, PCRW                 )
 END DO
diff --git a/src/MNH/ppm_scalar.f90 b/src/MNH/ppm_scalar.f90
index 463d3eec6..0c6ab86c0 100644
--- a/src/MNH/ppm_scalar.f90
+++ b/src/MNH/ppm_scalar.f90
@@ -10,11 +10,11 @@
 !
 INTERFACE
 !
-      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR,   &
-                     PCRU, PCRV, PCRW, PTSTEP, PRHODJ,    &
-                     PRHOX1, PRHOX2, PRHOY1, PRHOY2,      &
-                     PRHOZ1, PRHOZ2,                      &
-                     PSVT, PRSVS, HSV_ADV_SCHEME          ) 
+      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR,     &
+                     PCRU, PCRV, PCRW, PTSTEP, PTSTEP_PPM,  &
+                     PRHODJ, PRHOX1, PRHOX2, PRHOY1, PRHOY2,&
+                     PRHOZ1, PRHOZ2,                        &
+                     PSVT, PRSVS, HSV_ADV_SCHEME            ) 
 !
 USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 USE MODD_TYPE_DATE,   ONLY : DATE_TIME
@@ -36,7 +36,8 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOX1,PRHOX2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOY1,PRHOY2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOZ1,PRHOZ2
 !
-REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step model  
+REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT         ! Vars at t
 !
@@ -50,11 +51,11 @@ END INTERFACE
 END MODULE MODI_PPM_SCALAR
 !
 !     ######################################################################
-      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR,   &
-                     PCRU, PCRV, PCRW, PTSTEP, PRHODJ,    &
-                     PRHOX1, PRHOX2, PRHOY1, PRHOY2,      &
-                     PRHOZ1, PRHOZ2,                      &
-                     PSVT, PRSVS, HSV_ADV_SCHEME          ) 
+      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR,     &
+                     PCRU, PCRV, PCRW, PTSTEP, PTSTEP_PPM,  &
+                     PRHODJ, PRHOX1, PRHOX2, PRHOY1, PRHOY2,&
+                     PRHOZ1, PRHOZ2,                        &
+                     PSVT, PRSVS, HSV_ADV_SCHEME            ) 
 !     ######################################################################
 !
 !!****  *PPM_SCALAR * 
@@ -123,7 +124,8 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOX1,PRHOX2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOY1,PRHOY2
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHOZ1,PRHOZ2
 !
-REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step model  
+REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT             
 !
@@ -147,8 +149,8 @@ IGRID = 1
 !
 DO JSV=1,KSV
    CALL ADVEC_PPM_ALGO(HSV_ADV_SCHEME, HLBCX, HLBCY, IGRID, PSVT(:,:,:,JSV), & 
-                       PRHODJ, PTSTEP, & 
-                       PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
+                       PRHODJ, PTSTEP, PTSTEP_PPM,                           & 
+                       PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2,       &
                        PRSVS(:,:,:,JSV), TPDTCUR, PCRU, PCRV, PCRW)
 END DO
 !
-- 
GitLab