diff --git a/src/MNH/advec_ppm_algo.f90 b/src/MNH/advec_ppm_algo.f90 index e4a09da0b65d23f042aec7db1f98f852eb38d4c8..5bbeadcee81c155e0cfdc6b115eb81d97e210548 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 60d68a9f6e74ae200972b045ea123afa3cceb287..9a6751d0e7f17adedca400a244696897d2df757b 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -11,12 +11,14 @@ 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 ) ! +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 @@ -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/ppm_met.f90 b/src/MNH/ppm_met.f90 index 65eed307e34969f39422614dcb4efa5b2caef965..6a728dfdf681da9e7767ccef583b337d6f8086c8 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 @@ -159,7 +164,7 @@ IGRID = 1 ! CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, & - ZSRC, KTCOUNT, PCRU, PCRV, PCRW) + ZSRC, TPDTCUR, PCRU, PCRV, PCRW) ! add the advection to the sources PRTHS = PRTHS + ZSRC ! @@ -169,7 +174,7 @@ PRTHS = PRTHS + ZSRC IF (GTKEALLOC) THEN CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTKET,PRHODJ,PTSTEP, & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1, PRHOZ2, & - ZSRC, KTCOUNT, PCRU, PCRV, PCRW) + ZSRC, TPDTCUR, PCRU, PCRV, PCRW) PRTKES = PRTKES + ZSRC ! ! @@ -184,7 +189,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, & - ZSRC, KTCOUNT, 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 25f08aba4d3d3b2f69bbb1c5fb445a493e66c54f..d3c768dfc6cec4be3178cc6852c0826e694cf53b 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 @@ -152,7 +156,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, & - ZSRC, KTCOUNT, PCRU, PCRV, PCRW) + ZSRC, TPDTCUR, PCRU, PCRV, PCRW) ! add the advection to the sources PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) + ZSRC(:,:,:) !