From d4b7d37a87906e78711bdad05ef0a9df15220892 Mon Sep 17 00:00:00 2001
From: Gaelle DELAUTIER <gaelle.delautier@meteo.fr>
Date: Fri, 25 Nov 2016 11:14:21 +0100
Subject: [PATCH] Christine 25/11/2016 : Correction on the flag for Strang
 splitting to insure reproducibility between START and RESTA

---
 src/MNH/advection_metsv.f90 | 12 +++++-------
 src/MNH/ppm_met.f90         | 25 ++++++++++++++++++-------
 src/MNH/ppm_scalar.f90      | 16 +++++++++++++---
 3 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 8318e5f05..df421b208 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -473,10 +473,10 @@ IF (GTKE)    PRTKES_ADV(:,:,:)  = 0.
 !* time splitting loop
 DO JSPL=1,KSPLIT
 !
-   !ZRTHS_PPM(:,:,:)   = 0.
-   !ZRTKES_PPM(:,:,:)   = 0.
-   !IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.
-   !IF (KSV /=0) ZRSVS_PPM(:,:,:,:)   = 0.
+   ZRTHS_PPM(:,:,:)   = 0.
+   ZRTKES_PPM(:,:,:)   = 0.
+   IF (KRR /=0) ZRRS_PPM(:,:,:,:)   = 0.
+   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, PTSTEP,ZTSTEP_PPM, &
@@ -495,7 +495,6 @@ DO JSPL=1,KSPLIT
    IF (KRR /=0)  PRRS      (:,:,:,:) = PRRS      (:,:,:,:) + ZRRS_PPM  (:,:,:,:) / KSPLIT
    IF (KSV /=0 ) PRSVS     (:,:,:,:) = PRSVS     (:,:,:,:) + ZRSVS_PPM (:,:,:,:) / KSPLIT
 !
-   IF (JSPL<KSPLIT) THEN
 !
 !  Guesses of the field inside the time splitting loop
 !
@@ -514,7 +513,7 @@ DO JSPL=1,KSPLIT
 ! Top and bottom Boundaries and LBC for the guesses
 !
    CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTH, PTHT )    
-    IF (GTKE) CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
+   CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZTKE, PTKET)
    DO JR = 1, KRR
      CALL ADV_BOUNDARIES (HLBCX, HLBCY, ZR(:,:,:,JR), PRT(:,:,:,JR))
    END DO
@@ -537,7 +536,6 @@ DO JSPL=1,KSPLIT
     CALL UPDATE_HALO_ll(TZFIELDS1_ll,IINFO_ll)
     CALL CLEANLIST_ll(TZFIELDS1_ll)
 !!$   END IF
-   END IF
 !
 END DO
 !
diff --git a/src/MNH/ppm_met.f90 b/src/MNH/ppm_met.f90
index d97e2fd93..7814e9f7b 100644
--- a/src/MNH/ppm_met.f90
+++ b/src/MNH/ppm_met.f90
@@ -39,8 +39,8 @@ REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET        ! Vars at t
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
 !
-REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PRTHS, PRTKES! Source terms
-REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRRS 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS 
 !
 END SUBROUTINE PPM_MET   
 !
@@ -131,8 +131,8 @@ REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET ! Vars at t
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
 !
-REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PRTHS, PRTKES! Source terms
-REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRRS 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS 
 !
 !*       0.2   Declarations of local variables :
 !
@@ -142,6 +142,11 @@ LOGICAL :: GTKEALLOC     ! true if TKE arrays are not zero-sized
 !
 INTEGER :: IGRID ! localisation on the model grid
 !
+!*        Variables specific to ppm scheme
+!
+! Advection source term calulated in the PPM algorithm
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC
+!
 !-------------------------------------------------------------------------------
 !
 !*       1.     COMPUTES THE DOMAIN DIMENSIONS
@@ -161,7 +166,9 @@ IGRID = 1
 !
 CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, &
                     PTSTEP_PPM,PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
-                    PRTHS, TPDTCUR, PCRU, PCRV, PCRW)
+                    ZSRC, TPDTCUR, PCRU, PCRV, PCRW)
+! add the advection to the sources
+PRTHS = PRTHS +  ZSRC 
 !
 !
 ! Turbulence variables
@@ -169,7 +176,8 @@ 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, &
                        PTSTEP_PPM,PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
-                       PRTKES, TPDTCUR, PCRU, PCRV, PCRW)
+                       ZSRC, TPDTCUR, PCRU, PCRV, PCRW)
+  PRTKES = PRTKES + ZSRC
 !
 !
 END IF
@@ -179,10 +187,13 @@ END IF
 ! Case with KRR moist variables
 !
 DO JRR=1,KRR
+!
    CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID,           &
                        PRT(:,:,:,JRR), PRHODJ, PTSTEP, PTSTEP_PPM,     &
                        PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, &
-                       PRRS(:,:,:,JRR), TPDTCUR, PCRU, PCRV, PCRW                 )
+                       ZSRC, TPDTCUR, PCRU, PCRV, PCRW                 )
+   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) + ZSRC(:,:,:)
+!
 END DO
 !
 !
diff --git a/src/MNH/ppm_scalar.f90 b/src/MNH/ppm_scalar.f90
index 0c6ab86c0..8e0d7e169 100644
--- a/src/MNH/ppm_scalar.f90
+++ b/src/MNH/ppm_scalar.f90
@@ -41,7 +41,7 @@ REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT         ! Vars at t
 !
-REAL, DIMENSION(:,:,:,:), INTENT(OUT  ) :: PRSVS ! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Source terms
 !
 !
 END SUBROUTINE PPM_SCALAR
@@ -129,7 +129,7 @@ REAL,                     INTENT(IN)    :: PTSTEP_PPM ! Time Step PPM
 !
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT             
 !
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)   :: PRSVS         ! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS         ! Source terms
 !
 !
 !*       0.2   Declarations of local variables :
@@ -138,6 +138,12 @@ INTEGER :: JSV           ! Loop index for Scalar Variables
 !
 INTEGER :: IGRID ! localisation on the model grid
 !
+!*        Variables specific to ppm scheme
+!
+! Advection source term calulated in the PPM algorithm
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC
+!
+!
 !-------------------------------------------------------------------------------
 !
 !*       1.     CALL THE ADVEC_PPM_ALGO ROUTINE FOR EACH FIELD
@@ -148,10 +154,14 @@ IGRID = 1
 ! Case with KSV tracers
 !
 DO JSV=1,KSV
+!
    CALL ADVEC_PPM_ALGO(HSV_ADV_SCHEME, HLBCX, HLBCY, IGRID, PSVT(:,:,:,JSV), & 
                        PRHODJ, PTSTEP, PTSTEP_PPM,                           & 
                        PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2,       &
-                       PRSVS(:,:,:,JSV), TPDTCUR, PCRU, PCRV, PCRW)
+                       ZSRC, TPDTCUR, PCRU, PCRV, PCRW)
+! add the advection to the sources
+   PRSVS(:,:,:,JSV) =  PRSVS(:,:,:,JSV) + ZSRC(:,:,:)   
+!
 END DO
 !
 !
-- 
GitLab