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