From f7176e3c1c317a47115bdb0f125df1df3b9dc86f Mon Sep 17 00:00:00 2001 From: Gaelle TANGUY <gaelle.tanguy@meteo.fr> Date: Tue, 15 Nov 2016 10:35:59 +0100 Subject: [PATCH] C.Lac 15/11/2016 : Correction on the flag for Strang splitting to insure reproducibility between START and RESTA (cherry picked from commit e321c0eb539630a98a8247c8e37d3ff21e3b8555) Conflicts: src/MNH/advection_metsv.f90 src/MNH/ppm_met.f90 src/MNH/ppm_scalar.f90 --- src/MNH/advec_ppm_algo.f90 | 28 ++++++++++++++++------------ src/MNH/advection_metsv.f90 | 22 +++++++++++++--------- src/MNH/modeln.f90 | 4 ++-- src/MNH/ppm_met.f90 | 19 ++++++++++++------- src/MNH/ppm_scalar.f90 | 16 ++++++++++------ 5 files changed, 53 insertions(+), 36 deletions(-) diff --git a/src/MNH/advec_ppm_algo.f90 b/src/MNH/advec_ppm_algo.f90 index e4a09da0b..5bbeadcee 100644 --- a/src/MNH/advec_ppm_algo.f90 +++ b/src/MNH/advec_ppm_algo.f90 @@ -17,7 +17,9 @@ INTERFACE SUBROUTINE ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, & PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,& - PSRC, KTCOUNT, PCRU, PCRV, PCRW) + PSRC, TPDTCUR, PCRU, PCRV, PCRW) +! +USE MODD_TIME, ONLY: DATE_TIME ! CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type @@ -33,7 +35,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOX1, PRHOX2 REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOY1, PRHOY2 REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOZ1, PRHOZ2 REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ! @@ -48,7 +50,7 @@ END MODULE MODI_ADVEC_PPM_ALGO SUBROUTINE ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, & PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,& - PSRC, KTCOUNT, PCRU, PCRV, PCRW) + PSRC, TPDTCUR, PCRU, PCRV, PCRW) ! ########################################################################## !! !!**** *ADVEC_PPM_ALGO* - interface for 3D advection with PPM type scheme @@ -73,12 +75,12 @@ END MODULE MODI_ADVEC_PPM_ALGO !! !! MODIFICATIONS !! ------------- +! 10/16 (C.Lac) : Correction on the flag for Strang splitting to insure +! reproducibility between START and RESTA +! ! -!USE MODE_ll +USE MODD_TYPE_DATE ! -!USE MODD_CONF -!USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll -!USE MODI_ADVEC_4TH_ORDER_AUX USE MODI_SHUMAN USE MODI_PPM ! @@ -100,7 +102,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOX1, PRHOX2 REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOY1, PRHOY2 REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHOZ1, PRHOZ2 REAL, INTENT(IN) :: PTSTEP ! Time step -INTEGER, INTENT(IN) :: KTCOUNT ! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ! @@ -108,7 +110,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ! !* 0.2 Declarations of local variables : ! -!INTEGER:: IW,IE,IS,IN,IT,IB,IWF,IEF,ISF,INF ! Coordinate of 4th order diffusion area +LOGICAL :: GFLAG ! Logical flag ! !------------------------------------------------------------------------------- ! @@ -121,6 +123,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC ! source term after advection ! ------------ ! PSRC = PFIELDT +GFLAG = ABS(MOD(TPDTCUR%TIME/PTSTEP,2.)-1.) .LE. 0.5 ! SELECT CASE (HMET_ADV_SCHEME) ! @@ -128,7 +131,8 @@ SELECT CASE (HMET_ADV_SCHEME) ! CASE('PPM_00') ! - IF (MODULO(KTCOUNT,2) .EQ. 0) THEN ! JUANTEST50 +! IF (MODULO(KTCOUNT,2) .EQ. 0) THEN ! JUANTEST50 + IF (GFLAG ) THEN ! !* 1. ADVECTION IN X DIRECTION ! ------------------------ @@ -175,7 +179,7 @@ CASE('PPM_00') ! CASE('PPM_01') ! - IF (MODULO(KTCOUNT,2) .EQ. 0) THEN + IF (GFLAG ) THEN ! !* 1. ADVECTION IN X DIRECTION ! ------------------------ @@ -227,7 +231,7 @@ CASE('PPM_01') ! CASE('PPM_02') ! - IF (MODULO(KTCOUNT,2) .EQ. 0) THEN + IF (GFLAG ) THEN ! !* 1. ADVECTION IN X DIRECTION ! ------------------------ diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 42fd18021..46158951e 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -11,13 +11,15 @@ INTERFACE SUBROUTINE ADVECTION_METSV (HLUOUT, HFMFILE, OCLOSE_OUT,HUVW_ADV_SCHEME, & HMET_ADV_SCHEME,HSV_ADV_SCHEME, HCLOUD, KSPLIT, & OSPLIT_CFL, PSPLIT_CFL, OCFL_WRIT, & - HLBCX, HLBCY, KRR, KSV, KTCOUNT, PTSTEP, & + HLBCX, HLBCY, KRR, KSV, TPDTCUR, PTSTEP, & PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT, PPABST, & PTHVREF, PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY, & PRTHS, PRRS, PRTKES, PRSVS, & PRTHS_CLD, PRRS_CLD, PRSVS_CLD, PRTKES_ADV ) ! -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for synchronous +USE MODD_TYPE_DATE, ONLY: DATE_TIME +! +LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for syncronous ! file opening CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output ! FM-file @@ -39,7 +41,7 @@ CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables ! -INTEGER, INTENT(IN) :: KTCOUNT +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT , PVT , PWT @@ -67,7 +69,7 @@ END MODULE MODI_ADVECTION_METSV SUBROUTINE ADVECTION_METSV (HLUOUT, HFMFILE, OCLOSE_OUT,HUVW_ADV_SCHEME, & HMET_ADV_SCHEME,HSV_ADV_SCHEME, HCLOUD, KSPLIT, & OSPLIT_CFL, PSPLIT_CFL, OCFL_WRIT, & - HLBCX, HLBCY, KRR, KSV, KTCOUNT, PTSTEP, & + HLBCX, HLBCY, KRR, KSV, TPDTCUR, PTSTEP, & PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT, PPABST, & PTHVREF, PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY, & PRTHS, PRRS, PRTKES, PRSVS, & @@ -131,7 +133,8 @@ END MODULE MODI_ADVECTION_METSV !! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar : 01/10/2015 : add computation of CFL for L1D case !! 04/2016 (C.Lac) : correction of negativity for KHKO -!! +!! 10/2016 (C.Lac) Correction on the flag for Strang splitting +!! to insure reproducibility between START and RESTA !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -145,6 +148,7 @@ USE MODD_CONF, ONLY : LNEUTRAL,NHALO,L1D, L2D USE MODD_CTURB, ONLY : XTKEMIN USE MODD_CST USE MODD_BUDGET +USE MODD_TYPE_DATE, ONLY: DATE_TIME ! USE MODI_CONTRAV USE MODI_PPM_RHODJ @@ -183,7 +187,7 @@ CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables ! -INTEGER, INTENT(IN) :: KTCOUNT +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time REAL, INTENT(IN) :: PTSTEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT , PVT , PWT @@ -475,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, KTCOUNT, ZRUCPPM, ZRVCPPM, ZRWCPPM, ZTSTEP_PPM, & - PRHODJ, ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & + CALL PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR,ZRUCPPM, ZRVCPPM, ZRWCPPM, 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, KTCOUNT, ZRUCPPM, ZRVCPPM, ZRWCPPM, & + CALL PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR, ZRUCPPM, ZRVCPPM, ZRWCPPM, & ZTSTEP_PPM, PRHODJ, ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, & ZSV, ZRSVS_PPM, HSV_ADV_SCHEME ) ! diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index d2f5eddb8..13531cc11 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -5,7 +5,7 @@ !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- -! $Source$ $Revision$ +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/modeln.f90,v $ $Revision: 1.3.2.5.2.5.2.9.2.12.2.7.2.4 $ !----------------------------------------------------------------- ! ################### MODULE MODI_MODEL_n @@ -1464,7 +1464,7 @@ CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,& CALL ADVECTION_METSV ( CLUOUT, YFMFILE, GCLOSE_OUT,CUVW_ADV_SCHEME, & CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT, & LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT, & - CLBCX, CLBCY, NRR, NSV, KTCOUNT, XTSTEP, & + CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP, & XUT, XVT, XWT, XTHT, XRT, XTKET, XSVT, XPABST, & XTHVREF, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, & XRTHS, XRRS, XRTKES, XRSVS, & diff --git a/src/MNH/ppm_met.f90 b/src/MNH/ppm_met.f90 index d89ff1700..1e6401664 100644 --- a/src/MNH/ppm_met.f90 +++ b/src/MNH/ppm_met.f90 @@ -9,18 +9,20 @@ ! INTERFACE ! - SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, & + SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR, & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, & PRHOZ1, PRHOZ2, PTHT, PTKET, PRT, & PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME ) ! +USE MODD_TYPE_DATE, ONLY: DATE_TIME +! CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type CHARACTER (LEN=6), INTENT(IN) :: HMET_ADV_SCHEME ! INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KTCOUNT! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRU ! Courant REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! numbers @@ -46,7 +48,7 @@ END INTERFACE END MODULE MODI_PPM_MET ! ! ###################################################################### - SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT, & + SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, TPDTCUR, & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, & PRHOZ1, PRHOZ2, PTHT, PTKET, PRT, & @@ -80,6 +82,8 @@ END MODULE MODI_PPM_MET !! ------------- !! Original 11.05.2006. T.Maric !! Modification : 11.2011 C.Lac, V.Masson : Advection of (theta_l,r_t) +!! 10/2016 (C.Lac) Correction on the flag for Strang splitting +!! to insure reproducibility between START and RESTA !! !------------------------------------------------------------------------------- ! @@ -90,6 +94,7 @@ END MODULE MODI_PPM_MET ! USE MODD_PARAMETERS USE MODD_CONF +USE MODD_TYPE_DATE, ONLY: DATE_TIME ! USE MODI_SHUMAN USE MODI_PPM @@ -108,7 +113,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type CHARACTER (LEN=6), INTENT(IN) :: HMET_ADV_SCHEME ! INTEGER, INTENT(IN) :: KRR ! Number of moist variables -INTEGER, INTENT(IN) :: KTCOUNT! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRU ! contravariant REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! components @@ -154,7 +159,7 @@ IGRID = 1 ! CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, & - PRTHS, KTCOUNT, PCRU, PCRV, PCRW) + PRTHS, TPDTCUR, PCRU, PCRV, PCRW) ! ! ! Turbulence variables @@ -162,7 +167,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, & - PRTKES, KTCOUNT, PCRU, PCRV, PCRW) + PRTKES, TPDTCUR, PCRU, PCRV, PCRW) ! ! END IF @@ -175,7 +180,7 @@ DO JRR=1,KRR CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, & PRT(:,:,:,JRR), PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, & - PRRS(:,:,:,JRR), KTCOUNT, PCRU, PCRV, PCRW ) + PRRS(:,:,:,JRR), TPDTCUR, PCRU, PCRV, PCRW ) END DO ! ! diff --git a/src/MNH/ppm_scalar.f90 b/src/MNH/ppm_scalar.f90 index 99951ba52..463d3eec6 100644 --- a/src/MNH/ppm_scalar.f90 +++ b/src/MNH/ppm_scalar.f90 @@ -10,20 +10,22 @@ ! INTERFACE ! - SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, KTCOUNT, & + SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR, & PCRU, PCRV, PCRW, PTSTEP, 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 +! ! CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type CHARACTER (LEN=6), INTENT(IN) :: HSV_ADV_SCHEME ! INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -INTEGER, INTENT(IN) :: KTCOUNT! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRU ! Courant REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! numbers @@ -48,7 +50,7 @@ END INTERFACE END MODULE MODI_PPM_SCALAR ! ! ###################################################################### - SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, KTCOUNT, & + SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, TPDTCUR, & PCRU, PCRV, PCRW, PTSTEP, PRHODJ, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, & PRHOZ1, PRHOZ2, & @@ -82,7 +84,8 @@ END MODULE MODI_PPM_SCALAR !! ------------- !! Original 11.05.2006. T.Maric !! Modification : 11.2011 C.Lac, V.Masson : Advection of (theta_l,r_t) -!! +!! 10/2016 (C.Lac) Correction on the flag for Strang splitting +!! to insure reproducibility between START and RESTA!! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -93,6 +96,7 @@ END MODULE MODI_PPM_SCALAR USE MODD_PARAMETERS USE MODD_CONF USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll +USE MODD_TYPE_DATE, ONLY: DATE_TIME ! USE MODI_SHUMAN USE MODI_PPM @@ -108,7 +112,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type CHARACTER (LEN=6), INTENT(IN) :: HSV_ADV_SCHEME ! INTEGER, INTENT(IN) :: KSV ! Number of Scalar Variables -INTEGER, INTENT(IN) :: KTCOUNT! iteration count +TYPE (DATE_TIME), INTENT(IN) :: TPDTCUR ! current date and time ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRU ! contravariant REAL, DIMENSION(:,:,:), INTENT(IN) :: PCRV ! components @@ -145,7 +149,7 @@ DO JSV=1,KSV CALL ADVEC_PPM_ALGO(HSV_ADV_SCHEME, HLBCX, HLBCY, IGRID, PSVT(:,:,:,JSV), & PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, & - PRSVS(:,:,:,JSV), KTCOUNT, PCRU, PCRV, PCRW) + PRSVS(:,:,:,JSV), TPDTCUR, PCRU, PCRV, PCRW) END DO ! ! -- GitLab