C.Lac 15/11/2016 : Correction on the flag for Strang splitting to insure reproducibil...
authorGaelle TANGUY <gaelle.tanguy@meteo.fr>
Tue, 15 Nov 2016 09:35:59 +0000 (10:35 +0100)
committerJuan Escobar <escj@aero.obs-mip.fr>
Tue, 22 Nov 2016 14:30:04 +0000 (15:30 +0100)
(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
src/MNH/advection_metsv.f90
src/MNH/modeln.f90
src/MNH/ppm_met.f90
src/MNH/ppm_scalar.f90

index e4a09da..5bbeadc 100644 (file)
@@ -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
 !               ------------------------
index 42fd180..4615895 100644 (file)
@@ -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                                       )
 !
index d2f5edd..13531cc 100644 (file)
@@ -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,                         &
index d89ff17..1e64016 100644 (file)
@@ -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
 !
 !
index 99951ba..463d3ee 100644 (file)
 !
 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
 !
 !