From ac54312f658cad0a28f192a0e63f00bfdbf5fca8 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 28 Mar 2018 14:35:29 +0200 Subject: [PATCH] Philippe 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE and ADD_FORECAST_TO_DATE and SUBTRACT_TO_DATE by DATETIME_CORRECTDATE --- src/LIB/SURCOUCHE/src/mode_netcdf.f90 | 14 +- src/MNH/add_forecast_to_date.f90 | 143 --------------- src/MNH/adv_forcingn.f90 | 17 +- src/MNH/aircraft_balloon_evol.f90 | 30 +-- src/MNH/diag.f90 | 19 +- src/MNH/eddyUV_fluxn.f90 | 1 - src/MNH/forcing.f90 | 15 +- src/MNH/ground_paramn.f90 | 9 +- src/MNH/ini_cpl.f90 | 21 +-- src/MNH/ini_modeln.f90 | 4 +- src/MNH/ini_spectren.f90 | 1 - src/MNH/init_ground_paramn.f90 | 22 ++- src/MNH/mnh2lpdm_ini.f90 | 12 +- src/MNH/mode_les_diachro.f90 | 38 ++-- src/MNH/modeln.f90 | 11 +- src/MNH/paspol.f90 | 28 +-- src/MNH/phys_paramn.f90 | 21 +-- src/MNH/profilern.f90 | 8 +- src/MNH/read_all_data_grib_case.f90 | 8 +- src/MNH/rel_forcingn.f90 | 17 +- src/MNH/seriesn.f90 | 9 +- src/MNH/setlb_lg.f90 | 9 +- src/MNH/stationn.f90 | 7 +- src/MNH/subtract_to_date.f90 | 136 -------------- src/MNH/temporal_dist.f90 | 251 -------------------------- src/MNH/write_budget.f90 | 13 +- src/MNH/write_ts1d.f90 | 10 +- 27 files changed, 129 insertions(+), 745 deletions(-) delete mode 100644 src/MNH/add_forecast_to_date.f90 delete mode 100644 src/MNH/subtract_to_date.f90 delete mode 100644 src/MNH/temporal_dist.f90 diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 03aa2bfce..12b8ab3fb 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -522,12 +522,12 @@ END SUBROUTINE WRITE_VER_COORD SUBROUTINE WRITE_TIME_COORD(TDIM) USE MODD_TIME_n, ONLY: TDTMOD, TDTCUR + USE MODD_TYPE_DATE + USE MODE_DATETIME USE MODE_FIELD, ONLY: TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME USE MODE_GRIDPROJ - USE MODI_TEMPORAL_DIST - TYPE(DIMCDF), POINTER, INTENT(IN) :: TDIM REAL :: ZDELTATIME @@ -536,6 +536,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) INTEGER(KIND=IDCDF_KIND) :: IVARID INTEGER(KIND=IDCDF_KIND) :: IVDIM INTEGER(KIND=IDCDF_KIND) :: STATUS + TYPE(DATE_TIME) :: TZREF IF (ASSOCIATED(TDTCUR) .AND. ASSOCIATED(TDTMOD)) THEN @@ -565,10 +566,13 @@ SUBROUTINE WRITE_TIME_COORD(TDIM) STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard') IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_ATTR_NC4 [NF90_PUT_ATT]') + ! Model beginning date (TDTMOD%TDATE) is used as the reference date + ! Reference time is set to 0. + TZREF = TDTMOD + TZREF%TIME = 0. + ! Compute the temporal distance from reference + CALL DATETIME_DISTANCE(TZREF,TDTCUR,ZDELTATIME) ! Write the data - CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTMOD%TDATE%YEAR, TDTMOD%TDATE%MONTH, TDTMOD%TDATE%DAY, 0., & - ZDELTATIME ) STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME) IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'WRITE_NC_COORDS_VAR[NF90_PUT_VAR] '//TRIM(YVARNAME)) END IF diff --git a/src/MNH/add_forecast_to_date.f90 b/src/MNH/add_forecast_to_date.f90 deleted file mode 100644 index c5161d6e7..000000000 --- a/src/MNH/add_forecast_to_date.f90 +++ /dev/null @@ -1,143 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 prep_real 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! ################################ - MODULE MODI_ADD_FORECAST_TO_DATE -! ################################ -INTERFACE - SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC) -! -INTEGER, INTENT(INOUT) :: KYEAR ! year of date -INTEGER, INTENT(INOUT) :: KMONTH ! month of date -INTEGER, INTENT(INOUT) :: KDAY ! day of date -REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC -! -END SUBROUTINE ADD_FORECAST_TO_DATE -END INTERFACE -END MODULE MODI_ADD_FORECAST_TO_DATE -! -! ####################################################### - SUBROUTINE ADD_FORECAST_TO_DATE(KYEAR,KMONTH,KDAY,PSEC) -! ####################################################### -! -!!**** *ADD_FORECAST_TO_DATE* - finds the current date and hour of a forecast -!! -!! PURPOSE -!! ------- -!! -!! WARNING -!! -!! -----> Only correct for dates between 19900301 and 21000228 <----- -!! -!! The correct test should be: -!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN -!! -!!** METHOD -!! ------ -!! -!! A recursive method is used, adding one day ofter the other. -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! Book 2 -!! -!! AUTHOR -!! ------ -!! -! V.Masson Meteo-France -!! -!! MODIFICATIONS -!! ------------- -!! Original 01/09/95 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -INTEGER, INTENT(INOUT) :: KYEAR ! year of date -INTEGER, INTENT(INOUT) :: KMONTH ! month of date -INTEGER, INTENT(INOUT) :: KDAY ! day of date -REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -INTEGER :: IDAYS ! number of days in KMONTH -!------------------------------------------------------------------------------- -! -!* 1. Return condition: less than one day to add -! ------------------------------------------ -! -DO - IF (86400.-PSEC > 1.E-6) EXIT -! -!------------------------------------------------------------------------------- -! -!* 2. Adding one day -! -------------- -! - PSEC=PSEC-86400. -! -!* 2.1 Number of days in a month -! ------------------------- -! - SELECT CASE (KMONTH) - CASE(4,6,9,11) - IDAYS=30 - CASE(1,3,5,7:8,10,12) - IDAYS=31 - CASE(2) - IF (MOD(KYEAR,4)==0) THEN - IDAYS=29 - ELSE - IDAYS=28 - ENDIF - END SELECT -! -!* 2.2 Last day of the month -! --------------------- -! - IF (KDAY==IDAYS) THEN - IF (KMONTH==12) THEN - KDAY=1 - KMONTH=1 - KYEAR=KYEAR+1 - ELSE - KDAY=1 - KMONTH=KMONTH+1 - ENDIF -! -!* 2.3 Other days -! ---------- - ELSE - KDAY=KDAY+1 - ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Recursive call -! -------------- -! -ENDDO -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE ADD_FORECAST_TO_DATE diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90 index 7693be14b..bccca3ad6 100644 --- a/src/MNH/adv_forcingn.f90 +++ b/src/MNH/adv_forcingn.f90 @@ -90,13 +90,15 @@ END MODULE MODI_ADV_FORCING_n !! !! MODIFICATIONS !! ------------- -!! Original 08/11/10 +!! Original 08/11/10 +!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE !! !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODE_DATETIME USE MODE_FM USE MODE_IO_ll ! @@ -107,7 +109,6 @@ USE MODD_TIME USE MODD_BUDGET ! USE MODI_TEMPORAL_LT -USE MODI_TEMPORAL_DIST USE MODI_BUDGET ! USE MODD_ADVFRC_n ! Modules for time evolving advfrc @@ -202,18 +203,10 @@ ELSE JXP= JSX_ADV +1 WRITE(UNIT=ILUOUT0,FMT='(" THE ADV FORCING FIELDS ARE INTERPOLATED NOW" ,& & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_ADV,JXP - CALL TEMPORAL_DIST ( TDTADVFRC(JXP)%TDATE%YEAR,TDTADVFRC(JXP)%TDATE%MONTH, & - TDTADVFRC(JXP)%TDATE%DAY ,TDTADVFRC(JXP)%TIME, & - TDTADVFRC(JSX_ADV)%TDATE%YEAR ,TDTADVFRC(JSX_ADV)%TDATE%MONTH, & - TDTADVFRC(JSX_ADV)%TDATE%DAY ,TDTADVFRC(JSX_ADV)%TIME, & - ZSDTJX ) + CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TDTADVFRC(JXP),ZSDTJX) END IF ! - CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR ,TPDTCUR%TDATE%MONTH, & - TPDTCUR%TDATE%DAY ,TPDTCUR%TIME, & - TDTADVFRC(JSX_ADV)%TDATE%YEAR,TDTADVFRC(JSX_ADV)%TDATE%MONTH, & - TDTADVFRC(JSX_ADV)%TDATE%DAY ,TDTADVFRC(JSX_ADV)%TIME, & - ZDT ) + CALL DATETIME_DISTANCE(TDTADVFRC(JSX_ADV),TPDTCUR,ZDT) ! ZALPHA = ZDT / ZSDTJX ! diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index 358909760..556ce677d 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -131,6 +131,7 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL !! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for !! aircraft, ballon and profiler !! October, 2016 (G.DELAUTIER) LIMA +!! March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !! !! -------------------------------------------------------------------------- ! @@ -174,6 +175,7 @@ USE MODD_TIME USE MODD_TURB_FLUX_AIRCRAFT_BALLOON USE MODD_TYPE_DATE ! +USE MODE_DATETIME USE MODE_FGAU, ONLY: GAULAG USE MODE_FSCATTER, ONLY: QEPSW,QEPSI,BHMIE,MOMG,MG USE MODE_GRIDPROJ @@ -182,7 +184,6 @@ USE MODE_ll USE MODE_MSG ! USE MODI_GAMMA, ONLY: GAMMA -USE MODI_TEMPORAL_DIST USE MODI_WATER_SUM ! IMPLICIT NONE @@ -402,15 +403,7 @@ ZYHATM( IJU )=1.5*PYHAT( IJU )-0.5*PYHAT( IJU-1) !* 2.3 Compute time until launch by comparison of dates and times ! ---------------------------------------------------------- ! -CALL TEMPORAL_DIST( TPDTCUR%TDATE%YEAR , & - TPDTCUR%TDATE%MONTH , & - TPDTCUR%TDATE%DAY , & - TPDTCUR%TIME , & - TPFLYER%LAUNCH%TDATE%YEAR , & - TPFLYER%LAUNCH%TDATE%MONTH, & - TPFLYER%LAUNCH%TDATE%DAY , & - TPFLYER%LAUNCH%TIME - .001, & - ZTDIST ) +CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST) ! !* 3. LAUNCH ! ------ @@ -424,21 +417,12 @@ IF (.NOT. TPFLYER%FLY) THEN !* 3.1 comparison of dates and times ! ----------------------------- ! -! CALL TEMPORAL_DIST( TPDTCUR%TDATE%YEAR , & -! TPDTCUR%TDATE%MONTH , & -! TPDTCUR%TDATE%DAY , & -! TPDTCUR%TIME , & -! TPFLYER%LAUNCH%TDATE%YEAR , & -! TPFLYER%LAUNCH%TDATE%MONTH, & -! TPFLYER%LAUNCH%TDATE%DAY , & -! TPFLYER%LAUNCH%TIME - .001, & -! ZTDIST ) -! +! CALL DATETIME_DISTANCE(TPFLYER%LAUNCH,TPDTCUR,ZTDIST) ! !* 3.2 launch/takeoff is effective ! --------------------------- ! - IF (ZTDIST >= - PTSTEP .AND. ZTDIST /= XUNDEF ) THEN + IF (ZTDIST >= - PTSTEP ) THEN IF (TPFLYER%TYPE=='AIRCRA') THEN ! !* 3.2.1 Determination of flight segment @@ -523,9 +507,7 @@ END IF ! IF (GSTORE) THEN IN = TPFLYER%N_CUR - CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY, & - TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY, & - TDTEXP%TIME,ZTIMEEXP) + CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) ! TPFLYER%TIME(IN) = (IN-1) * TPFLYER%STEP + ZTIMEEXP TPFLYER%DATIME( 1,IN) = TPDTEXP%TDATE%YEAR diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 73128f792..a3e7484c5 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -84,6 +84,8 @@ !! 01/2018 (J.-P. Chaboureau) Add altitude interpolation !! 01/2018 (J.-P. Chaboureau) Add coarse graining !! 01/2018 (G.Delautier) SURFEX 8.1 +!! 03/2018 (P.Wautelet) replace SUBTRACT_TO_DATE and ADD_FORECAST_TO_DATE +!! by DATETIME_CORRECTDATE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -130,6 +132,7 @@ USE MODD_TIME_n USE MODD_TURB_n USE MODD_VAR_ll ! +USE MODE_DATETIME USE MODE_FM USE MODE_FMREAD USE MODE_FMWRIT, ONLY: IO_WRITE_HEADER @@ -519,14 +522,11 @@ IF ( LAIRCRAFT_BALLOON ) THEN WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE' WRITE(ILUOUT0,*) ' ' ! - TXDTBAL%TDATE%YEAR = TDTCUR%TDATE%YEAR + TXDTBAL%TDATE%YEAR = TDTCUR%TDATE%YEAR TXDTBAL%TDATE%MONTH = TDTCUR%TDATE%MONTH - TXDTBAL%TDATE%DAY = TDTCUR%TDATE%DAY - TXDTBAL%TIME = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2. - CALL SUBTRACT_TO_DATE(TXDTBAL%TDATE%YEAR, & - TXDTBAL%TDATE%MONTH,& - TXDTBAL%TDATE%DAY, & - TXDTBAL%TIME ) + TXDTBAL%TDATE%DAY = TDTCUR%TDATE%DAY + TXDTBAL%TIME = TDTCUR%TIME - NTIME_AIRCRAFT_BALLOON/2. + CALL DATETIME_CORRECTDATE(TXDTBAL) ! ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2))) @@ -545,10 +545,7 @@ IF ( LAIRCRAFT_BALLOON ) THEN !----------------------------- ! TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON - CALL ADD_FORECAST_TO_DATE(TXDTBAL%TDATE%YEAR, & - TXDTBAL%TDATE%MONTH,& - TXDTBAL%TDATE%DAY, & - TXDTBAL%TIME ) + CALL DATETIME_CORRECTDATE(TXDTBAL) ENDDO CALL IO_WRITE_HEADER(TZDIACFILE) CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE) diff --git a/src/MNH/eddyUV_fluxn.f90 b/src/MNH/eddyUV_fluxn.f90 index 5ee01d390..2abed9300 100644 --- a/src/MNH/eddyUV_fluxn.f90 +++ b/src/MNH/eddyUV_fluxn.f90 @@ -99,7 +99,6 @@ USE MODI_SHUMAN USE MODE_GRIDPROJ USE MODI_MEAN_Z USE MODD_LUNIT_n -USE MODI_TEMPORAL_DIST USE MODD_LATZ_EDFLX ! USE MODE_MSG diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90 index c7ebd7981..24df53fe4 100644 --- a/src/MNH/forcing.f90 +++ b/src/MNH/forcing.f90 @@ -148,11 +148,13 @@ END MODULE MODI_FORCING !! 06/2012 V. Masson Adds tendency of geostrophic wind itself to wind tendency !! 01/2014 J. escobar correction for // initialisation geostrophic ZUF,ZVF,ZWF !! 09/2017 Q.Rodier add LTEND_UV_FRC +!! 28/03/2018 P. Wautelet Replace TEMPORAL_DIST by DATETIME_DISTANCE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODE_DATETIME USE MODE_FM USE MODE_IO_ll USE MODE_MSG @@ -169,7 +171,6 @@ USE MODD_CST USE MODI_SHUMAN USE MODI_UPSTREAM_Z USE MODI_TEMPORAL_LT -USE MODI_TEMPORAL_DIST USE MODI_BUDGET ! USE MODI_GET_HALO @@ -419,18 +420,10 @@ ELSE JXP= JSX +1 WRITE(UNIT=ILUOUT0,FMT='(" THE FORCING FIELDS ARE INTERPOLATED NOW" ,& & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX,JXP - CALL TEMPORAL_DIST ( TDTFRC(JXP)%TDATE%YEAR,TDTFRC(JXP)%TDATE%MONTH, & - TDTFRC(JXP)%TDATE%DAY ,TDTFRC(JXP)%TIME, & - TDTFRC(JSX)%TDATE%YEAR ,TDTFRC(JSX)%TDATE%MONTH, & - TDTFRC(JSX)%TDATE%DAY ,TDTFRC(JSX)%TIME, & - ZSDTJX ) + CALL DATETIME_DISTANCE(TDTFRC(JSX),TDTFRC(JXP),ZSDTJX) END IF ! - CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR ,TPDTCUR%TDATE%MONTH, & - TPDTCUR%TDATE%DAY ,TPDTCUR%TIME, & - TDTFRC(JSX)%TDATE%YEAR,TDTFRC(JSX)%TDATE%MONTH, & - TDTFRC(JSX)%TDATE%DAY ,TDTFRC(JSX)%TIME, & - ZDT ) + CALL DATETIME_DISTANCE(TDTFRC(JSX),TPDTCUR,ZDT) ! ZALPHA = ZDT / ZSDTJX ! diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index ead62f435..032174db1 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -109,6 +109,7 @@ END MODULE MODI_GROUND_PARAM_n !! (M.Leriche) 24/03/16 remove flag for chemical surface fluxes !! (M.Leriche) 01/07/2017 Add DIAG chimical surface fluxes !! 01/2018 (G.Delautier) SURFEX 8.1 +!! (P.Wautelet) 28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -154,6 +155,7 @@ USE MODI_COUPLING_SURF_ATM_n USE MODI_DIAG_SURF_ATM_n USE MODD_MNH_SURFEX_n ! +USE MODE_DATETIME USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll #ifdef MNH_FOREFIRE @@ -165,7 +167,6 @@ USE MODI_COUPLING_FOREFIRE_n ! USE MODD_TIME_n USE MODD_TIME -USE MODI_TEMPORAL_DIST ! USE MODD_PARAM_LIMA, ONLY : MSEDC=>LSEDC ! @@ -509,11 +510,7 @@ CALL RESHAPE_SURF(IDIM1D) ! ! call to have the cumulated time since beginning of simulation ! -CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH, & - TDTSEG%TDATE%DAY, TDTSEG%TIME, & - ZTIMEC) +CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC) ! ! Call to surface schemes ! diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90 index cd7d1cc67..16d9d956a 100644 --- a/src/MNH/ini_cpl.f90 +++ b/src/MNH/ini_cpl.f90 @@ -149,7 +149,7 @@ END MODULE MODI_INI_CPL !! IO_FILE_CLOSE_ll : to close a FM-file !! INI_LS : to initialize larger scale fields !! INI_LB : to initialize "2D" surfacic LB fields -!! TEMPORAL_DIST : compute the temporal distance in secunds between 2 dates +!! DATETIME_DISTANCE : compute the temporal distance in seconds between 2 dates !! !! Module MODE_TIME : contains SM_PRINT_TIME routine !! and uses module MODD_TIME (for definition @@ -212,6 +212,7 @@ END MODULE MODI_INI_CPL !! Modification 05/2006 Remove KEPS !! (Escobar) 2/2014 add Forefire !! (J.Escobar) 26/03/2014 bug in init of NSV_USER on RESTA case +!! (P.Wautelet)28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -230,6 +231,7 @@ USE MODD_TIME_n ! USE MODD_FOREFIRE_n ! #endif ! +USE MODE_DATETIME USE MODE_FM, ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll USE MODE_FMREAD USE MODE_IO_ll @@ -240,7 +242,6 @@ USE MODE_TIME ! USE MODI_INI_LS USE MODI_INI_LB -USE MODI_TEMPORAL_DIST ! IMPLICIT NONE ! @@ -358,13 +359,9 @@ DO JCI=1,NCPL_NBR ! !* 2.2 Check chronological order ! - CALL TEMPORAL_DIST(TDTCPL(JCI)%TDATE%YEAR,TDTCPL(JCI)%TDATE%MONTH, & - TDTCPL(JCI)%TDATE%DAY ,TDTCPL(JCI)%TIME, & - TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY ,TDTCUR%TIME, & - ZDIST ) + CALL DATETIME_DISTANCE(TDTCUR,TDTCPL(JCI),ZDIST) ! - IF ( ZDIST == XUNDEF .OR. ZDIST ==0. ) THEN + IF ( ZDIST <=0. ) THEN WRITE(ILUOUT,FMT=9002) 1 WRITE(ILUOUT,*) 'YOUR COUPLING FILE ',JCI,' IS PREVIOUS TO THE DATE & & CORRESPONDING TO THE BEGINNING OF THE SEGMENT. IT WILL & @@ -379,13 +376,9 @@ DO JCI=1,NCPL_NBR END IF ! IF (JCI > 1) THEN - CALL TEMPORAL_DIST(TDTCPL(JCI)%TDATE%YEAR,TDTCPL(JCI)%TDATE%MONTH, & - TDTCPL(JCI)%TDATE%DAY ,TDTCPL(JCI)%TIME, & - TDTCPL(JCI-1)%TDATE%YEAR,TDTCPL(JCI-1)%TDATE%MONTH, & - TDTCPL(JCI-1)%TDATE%DAY ,TDTCPL(JCI-1)%TIME, & - ZDIST ) + CALL DATETIME_DISTANCE(TDTCPL(JCI-1),TDTCPL(JCI),ZDIST) ! - IF ( ZDIST == XUNDEF ) THEN + IF ( ZDIST < 0. ) THEN WRITE(ILUOUT,FMT=9003) 1 WRITE(ILUOUT,*) 'YOU MUST SPECIFY THE COUPLING FILES IN A CHRONOLOGICAL & & ORDER' diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index df8192de1..18161ac06 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -394,9 +394,7 @@ USE MODI_CH_AER_MOD_INIT USE MODD_PARAM_n USE MODE_MODELN_HANDLER USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll - -USE MODI_TEMPORAL_DIST - +! USE MODI_INI_AEROSET1 USE MODI_INI_AEROSET2 USE MODI_INI_AEROSET3 diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index ba1dab2cd..d823d9efa 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -125,7 +125,6 @@ USE MODI_GET_SIZEY_LB USE MODI_SET_GRID USE MODI_METRICS USE MODI_SET_REF -USE MODI_TEMPORAL_DIST USE MODI_UPDATE_METRICS USE MODI_UPDATE_NSV ! diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90 index d69587347..4aad8bbd0 100644 --- a/src/MNH/init_ground_paramn.f90 +++ b/src/MNH/init_ground_paramn.f90 @@ -69,14 +69,16 @@ END MODULE MODI_INIT_GROUND_PARAM_n !! Nov. 2010 (J.Escobar) PGI BUG , add SIZE(CSV) to interface !! 06/2016 (G.Delautier) phasage surfex 8 !! 01/2018 (G.Delautier) SURFEX 8.1 +!! 03/2018 (P.Wautelet) replace ADD_FORECAST_TO_DATE_SURF by DATETIME_CORRECTDATE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll +USE MODE_DATETIME USE MODE_IO_ll USE MODE_FIELD +USE MODE_ll ! USE MODD_DYN_n, ONLY : NSTOP, XTSTEP USE MODD_REF_n, ONLY : XRHODREF @@ -87,11 +89,10 @@ USE MODD_SALT, ONLY : CSALTNAMES USE MODD_CH_AEROSOL, ONLY : CAERONAMES USE MODD_TYPE_DATE, ONLY : DATE_TIME ! -USE MODD_TYPE_DATE_SURF, ONLY : DATE +USE MODD_TYPE_DATE_SURF, ONLY : DATE_SURF=>DATE ! USE MODD_PARAMETERS, ONLY : XUNDEF, JPVEXT ! -USE MODI_ADD_FORECAST_TO_DATE_SURF USE MODI_INIT_SURF_ATM_N ! USE MODD_MNH_SURFEX_n @@ -127,7 +128,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZEMIS ! emissivity REAL, DIMENSION(:), ALLOCATABLE :: ZTSRAD ! radiative temperature REAL, DIMENSION(:), ALLOCATABLE :: ZTSURF ! -TYPE(DATE) :: TDATE_END +TYPE(DATE_SURF) :: TDATE_END ! REAL :: ZDURATION ! @@ -143,6 +144,7 @@ INTEGER :: JLAYER! loop index INTEGER :: ISV INTEGER :: IID,IRESP TYPE (DATE_TIME), POINTER :: TZTCUR=>NULL() +TYPE (DATE_TIME) :: TZDATE ! !------------------------------------------------------------------------------- ! @@ -185,11 +187,13 @@ END DO CALL FIND_FIELD_ID_FROM_MNHNAME('DTCUR',IID,IRESP) TZTCUR=>TFIELDLIST(IID)%TFIELD_T0D(1)%DATA ! -TDATE_END%YEAR = TZTCUR%TDATE%YEAR -TDATE_END%MONTH = TZTCUR%TDATE%MONTH -TDATE_END%DAY = TZTCUR%TDATE%DAY -ZDURATION = NSTOP * XTSTEP + TZTCUR%TIME - CALL ADD_FORECAST_TO_DATE_SURF(TDATE_END%YEAR, TDATE_END%MONTH, TDATE_END%DAY, ZDURATION) +TZDATE = TZTCUR +TZDATE%TIME = TZDATE%TIME + NSTOP * XTSTEP +CALL DATETIME_CORRECTDATE(TZDATE) +!Done field by field because TYPE(DATE) different in MesoNH and SURFEX +TDATE_END%YEAR = TZDATE%TDATE%YEAR +TDATE_END%MONTH = TZDATE%TDATE%MONTH +TDATE_END%DAY = TZDATE%TDATE%DAY ! ISV = SIZE(HSV) CALL INIT_SURF_ATM_n(YSURF_CUR,'MESONH',HINIT,.FALSE., & diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index 9852c2aa2..e39b0fde5 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -38,16 +38,16 @@ USE MODD_PARAMETERS USE MODD_TIME USE MODD_TIME_n ! +USE MODE_DATETIME USE MODE_FM USE MODE_FMREAD USE MODE_GRIDPROJ USE MODE_IO_ll USE MODE_MODELN_HANDLER -USE MODI_XYTOLATLON ! USE MODI_INI_CST USE MODI_READ_HGRID -USE MODI_TEMPORAL_DIST +USE MODI_XYTOLATLON ! !* 0.2 Arguments. ! @@ -108,12 +108,8 @@ CALL IO_READ_FIELD(TPFILE1,'DTEXP',TZDTEXP1) CALL IO_READ_FIELD(TPFILE1,'DTCUR',TZDTCUR1) CALL IO_READ_FIELD(TPFILE2,'DTCUR',TZDTCUR2) ! -CALL TEMPORAL_DIST(TZDTCUR1%TDATE%YEAR,TZDTCUR1%TDATE%MONTH,TZDTCUR1%TDATE%DAY,TZDTCUR1%TIME, & - TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, & - ZECHEANCE1) -CALL TEMPORAL_DIST(TZDTCUR2%TDATE%YEAR,TZDTCUR2%TDATE%MONTH,TZDTCUR2%TDATE%DAY,TZDTCUR2%TIME, & - TZDTEXP1%TDATE%YEAR,TZDTEXP1%TDATE%MONTH,TZDTEXP1%TDATE%DAY,TZDTEXP1%TIME, & - ZECHEANCE2) +CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR1,ZECHEANCE1) +CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR2,ZECHEANCE2) ! IHHMDL=INT(TZDTEXP1%TIME/3600) IMNMDL=INT((TZDTEXP1%TIME-IHHMDL*3600)/60) diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90 index cf635b445..3bc56607d 100644 --- a/src/MNH/mode_les_diachro.f90 +++ b/src/MNH/mode_les_diachro.f90 @@ -605,8 +605,13 @@ SUBROUTINE LES_TIME_AVG(PTRAJT,PWORK6,KRESP,PDATIME_AVG) ! ! this routine computes time averaging ! +! Modifications: +! 03/2018 (P.Wautelet) replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE +! USE MODD_LES -USE MODI_ADD_FORECAST_TO_DATE +USE MODD_TYPE_DATE +! +USE MODE_DATETIME ! IMPLICIT NONE ! @@ -628,10 +633,7 @@ INTEGER :: JSV ! scalar loop counter INTEGER :: JX ! first spatial or spectral coordinate loop counter INTEGER :: JY ! second spatial or spectral coordinate loop counter REAL, DIMENSION(16) :: ZDATIME_SAVE ! date -INTEGER :: IYEAR,IMONTH,IDAY -REAL :: ZTIME,ZTIME2 -INTEGER :: JDAY -INTEGER :: JJ +TYPE(DATE_TIME) :: TZDATE !------------------------------------------------------------------------------ ! IF ( XLES_TEMP_MEAN_END==XUNDEF & @@ -703,23 +705,15 @@ DO JAVG=1,IAVG END DO END DO PTRAJT(JAVG,1)=(ZLES_TEMP_MEAN_START+ZLES_TEMP_MEAN_END)/2. - IYEAR=PDATIME_AVG(5,JAVG) - IMONTH=PDATIME_AVG(6,JAVG) - IDAY=PDATIME_AVG(7,JAVG) - ZTIME=PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1) - JDAY=NINT(ZTIME/86400.) - IF (JDAY .GT. 0) THEN - DO JJ=1,JDAY - ZTIME2=86400. - CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME2) - ZTIME=ZTIME-ZTIME2 - ENDDO - ENDIF - CALL ADD_FORECAST_TO_DATE(IYEAR,IMONTH,IDAY,ZTIME) - PDATIME_AVG(13,JAVG)=IYEAR - PDATIME_AVG(14,JAVG)=IMONTH - PDATIME_AVG(15,JAVG)=IDAY - PDATIME_AVG(16,JAVG)=ZTIME + TZDATE%TDATE%YEAR = PDATIME_AVG(5,JAVG) + TZDATE%TDATE%MONTH = PDATIME_AVG(6,JAVG) + TZDATE%TDATE%DAY = PDATIME_AVG(7,JAVG) + TZDATE%TIME = PDATIME_AVG(8,JAVG)+PTRAJT(JAVG,1) + CALL DATETIME_CORRECTDATE(TZDATE) + PDATIME_AVG(13,JAVG) = TZDATE%TDATE%YEAR + PDATIME_AVG(14,JAVG) = TZDATE%TDATE%MONTH + PDATIME_AVG(15,JAVG) = TZDATE%TDATE%DAY + PDATIME_AVG(16,JAVG) = TZDATE%TIME END DO ! DEALLOCATE(PWORK6) diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index b5abff18f..0217a48ea 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -93,7 +93,7 @@ END MODULE MODI_MODEL_n !! couple Model_n with outer informations. !! Subroutine ENDSTEP_BUDGET: writes the budget informations. !! Subroutine IO_FILE_CLOSE_ll: closes a file -!! Subroutine ADD_FORECAST_TO_DATE : transform the current time in GMT +!! Subroutine DATETIME_CORRECTDATE: transform the current time in GMT !! Subroutine FORCING : computes forcing terms !! Subroutine ADD3DFIELD_ll : add a field to 3D-list !! @@ -249,6 +249,7 @@ END MODULE MODI_MODEL_n !! 10/2017 (C.Lac) Necessity to have chemistry processes as !! the las process modifying XRSVS !! 01/2018 (G.Delautier) SURFEX 8.1 +!! 03/2018 (P.Wautelet) replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -328,6 +329,7 @@ USE MODD_TIMEZ USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI USE MODD_TURB_n ! +USE MODE_DATETIME USE MODE_ELEC_ll USE MODE_FM USE MODE_GRIDCART @@ -340,7 +342,6 @@ USE MODE_MODELN_HANDLER USE MODE_MPPDB USE MODE_NETCDF ! -USE MODI_ADD_FORECAST_TO_DATE USE MODI_ADVECTION_METSV USE MODI_ADVECTION_UVW USE MODI_ADVECTION_UVW_CEN @@ -393,7 +394,6 @@ USE MODI_SET_MASK USE MODI_SHUMAN USE MODI_SPAWN_LS_n USE MODI_STATION_n -USE MODI_TEMPORAL_DIST USE MODI_TURB_CLOUD_INDEX USE MODI_TWO_WAY USE MODI_UPDATE_NSV @@ -2010,10 +2010,7 @@ END IF ! -------------------- ! TDTCUR%TIME=TDTCUR%TIME + XTSTEP -CALL ADD_FORECAST_TO_DATE(TDTCUR%TDATE%YEAR, & - TDTCUR%TDATE%MONTH,& - TDTCUR%TDATE%DAY, & - TDTCUR%TIME ) +CALL DATETIME_CORRECTDATE(TDTCUR) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90 index 1943911dd..35d02ea58 100644 --- a/src/MNH/paspol.f90 +++ b/src/MNH/paspol.f90 @@ -57,6 +57,7 @@ END MODULE MODI_PASPOL !! GET_INDICE_ll replaced by GET_PHYSICAL_ll + !! remove the diffusion at the release !! C.Lac 11/11 Remove instant M +!! P.Wautelet 28/03/2018 Replace TEMPORAL_DIST by DATETIME_DISTANCE !! -------------------------------------------------------------------------- ! !! EXTERNAL @@ -88,7 +89,9 @@ USE MODD_PASPOL_n USE MODD_GRID_n USE MODD_TIME_n USE MODD_SUB_PASPOL_n +USE MODD_TYPE_DATE ! +USE MODE_DATETIME USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL ! !* 0. DECLARATIONS @@ -114,12 +117,12 @@ INTEGER :: IIB,IIE,IJB,IJE !intersection of the physical global doma INTEGER :: IKB, IKE INTEGER :: IIU, IJU, IKU ! dimensional indexes INTEGER :: JK ! Loop indice -INTEGER :: IYYCUR,IMMCUR,IDDCUR,JSV,IBOT,ITOP,II,IJ,IP +INTEGER :: JSV,IBOT,ITOP,II,IJ,IP REAL :: ZSRCX,ZSRCY,ZSRCI,ZSRCJ,ZTOP,ZGROUND,ZX,ZY,ZSOMME INTEGER :: I1YY,I1MM,I1DD,I1HH,I1MN,I1SS,I2YY,I2MM,I2DD,I2HH,I2MN,I2SS INTEGER :: I3YY,I3MM,I3DD,I3HH,I3MN,I3SS,I4YY,I4MM,I4DD,I4HH,I4MN,I4SS REAL :: Z1SEC,Z2SEC,Z3SEC,Z4SEC,ZT1,ZT2,ZT3,ZT4 -REAL :: ZCBOT,ZCTOP,ZEPAIS,ZENBAS,ZENHAUT,ZSSCUR,ZDEPUIS,ZRATE +REAL :: ZCBOT,ZCTOP,ZEPAIS,ZENBAS,ZENHAUT,ZDEPUIS,ZRATE ! REAL :: ZSURF ! Surface of a grid box ! @@ -139,6 +142,7 @@ REAL :: ZP, ZTH, ZT, ZRHO, ZMASAIR REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHOM ! REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTEMPO, ZSVT ! Work arrays ! +TYPE(DATE_TIME) :: TZDATE1,TZDATE2,TZDATE3,TZDATE4,TZDATE TYPE(TFIELDDATA) :: TZFIELD ! ! @@ -318,9 +322,13 @@ IF (GPPFIRSTCALL) THEN ! Chrono relative au debut du rejet en secondes. ! ZT1=0. - CALL TEMPORAL_DIST(I2YY,I2MM,I2DD,Z2SEC,I1YY,I1MM,I1DD,Z1SEC,ZT2) - CALL TEMPORAL_DIST(I3YY,I3MM,I3DD,Z3SEC,I1YY,I1MM,I1DD,Z1SEC,ZT3) - CALL TEMPORAL_DIST(I4YY,I4MM,I4DD,Z4SEC,I1YY,I1MM,I1DD,Z1SEC,ZT4) + TZDATE1%TDATE%YEAR=I1YY;TZDATE1%TDATE%MONTH=I1MM;TZDATE1%TDATE%DAY=I1DD;TZDATE1%TIME=Z1SEC + TZDATE2%TDATE%YEAR=I2YY;TZDATE2%TDATE%MONTH=I2MM;TZDATE2%TDATE%DAY=I2DD;TZDATE2%TIME=Z2SEC + TZDATE3%TDATE%YEAR=I3YY;TZDATE3%TDATE%MONTH=I3MM;TZDATE3%TDATE%DAY=I3DD;TZDATE3%TIME=Z3SEC + TZDATE4%TDATE%YEAR=I4YY;TZDATE4%TDATE%MONTH=I4MM;TZDATE4%TDATE%DAY=I4DD;TZDATE4%TIME=Z4SEC + CALL DATETIME_DISTANCE(TZDATE1,TZDATE2,ZT2) + CALL DATETIME_DISTANCE(TZDATE1,TZDATE3,ZT3) + CALL DATETIME_DISTANCE(TZDATE1,TZDATE4,ZT4) ! ! On met de cote le debut du rejet sous forme pratique ainsi ! que la chronologie relative. @@ -444,12 +452,6 @@ ENDIF ! !* 2.1 Date-heure courante sous forme plus pratique. ! -IYYCUR=TDTCUR%TDATE%YEAR -IMMCUR=TDTCUR%TDATE%MONTH -IDDCUR=TDTCUR%TDATE%DAY -ZSSCUR=TDTCUR%TIME -! -! WHERE (XSVT(:,:,:,NSV_PPBEG:NSV_PPEND) <0.0) & XSVT(:,:,:,NSV_PPBEG:NSV_PPEND)=0.0 ! @@ -465,8 +467,8 @@ DO JSV=1,NSV_PP ! !* 2.2 Distance temporelle DEPUIS le debut de rejet. ! - CALL TEMPORAL_DIST(IYYCUR,IMMCUR,IDDCUR,ZSSCUR, & - IDEBYY(JSV),IDEBMM(JSV),IDEBDD(JSV),ZDEBSS(JSV),ZDEPUIS) + TZDATE%TDATE%YEAR=IDEBYY(JSV);TZDATE%TDATE%MONTH=IDEBMM(JSV);TZDATE%TDATE%DAY=IDEBDD(JSV);TZDATE%TIME=ZDEBSS(JSV) + CALL DATETIME_DISTANCE(TZDATE,TDTCUR,ZDEPUIS) ! ! !* 2.3 Si la source emet. diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 400f590f7..781dddfee 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -229,11 +229,13 @@ END MODULE MODI_PHYS_PARAM_n !! M. Leriche 02/2017 Avoid negative fluxes if sv=0 outside the physics domain !! C.Lac 10/2017 : ch_monitor and aer_monitor extracted from phys_param !! to be called directly by modeln as the last process +!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +USE MODE_DATETIME USE MODE_ll USE MODE_FM USE MODE_FMWRIT @@ -296,7 +298,6 @@ USE MODI_TURB USE MODI_SUNPOS_n USE MODI_RADIATIONS USE MODI_CONVECTION -USE MODI_TEMPORAL_DIST USE MODI_BUDGET USE MODI_PASPOL USE MODI_CONDSAMP @@ -588,11 +589,7 @@ IF (CRAD /='NONE') THEN ! test to see if the partial radiations for cloudy must be called ! IF (CRAD =='ECMW') THEN - CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTRAD_CLONLY%TDATE%YEAR,TDTRAD_CLONLY%TDATE%MONTH, & - TDTRAD_CLONLY%TDATE%DAY, TDTRAD_CLONLY%TIME, & - ZTEMP_DIST) + CALL DATETIME_DISTANCE(TDTRAD_CLONLY,TDTCUR,ZTEMP_DIST) IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD_CLONLY/XTSTEP))==0 ) THEN TDTRAD_CLONLY = TDTCUR GRAD = .TRUE. @@ -602,11 +599,7 @@ IF (CRAD /='NONE') THEN ! ! test to see if the full radiations must be called ! - CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTRAD_FULL%TDATE%YEAR,TDTRAD_FULL%TDATE%MONTH, & - TDTRAD_FULL%TDATE%DAY, TDTRAD_FULL%TIME, & - ZTEMP_DIST) + CALL DATETIME_DISTANCE(TDTCUR,TDTRAD_FULL,ZTEMP_DIST) IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTRAD/XTSTEP))==0 ) THEN TDTRAD_FULL = TDTCUR GRAD = .TRUE. @@ -818,11 +811,7 @@ IF( CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) THEN ! GDCONV = .FALSE. ! - CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTDCONV%TDATE%YEAR,TDTDCONV%TDATE%MONTH, & - TDTDCONV%TDATE%DAY, TDTDCONV%TIME, & - ZTEMP_DIST) + CALL DATETIME_DISTANCE(TDTDCONV,TDTCUR,ZTEMP_DIST) IF( MOD(NINT(ZTEMP_DIST/XTSTEP),NINT(XDTCONV/XTSTEP))==0 ) THEN TDTDCONV = TDTCUR GDCONV = .TRUE. diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 041e1f2a1..f5c90341b 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -93,7 +93,7 @@ END MODULE MODI_PROFILER_n !! March 2013 : C.Lac : Corrections for 1D + new fields (RARE,THV,DD,FF) !! April 2014 : C.Lac : Call RADAR only if ICE3 !! C.Lac 10/2016 Add visibility diagnostic -!! +!! March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !! !! -------------------------------------------------------------------------- ! @@ -111,10 +111,10 @@ USE MODD_DIAG_IN_RUN USE MODD_CONF USE MODD_NSV ! +USE MODE_DATETIME USE MODE_ll ! USE MODI_WATER_SUM -USE MODI_TEMPORAL_DIST USE MODI_RADAR_RAIN_ICE USE MODI_LIDAR USE MODI_WATER_SUM @@ -261,9 +261,7 @@ IF ( TPROFILER%T_CUR == XUNDEF ) TPROFILER%T_CUR = TPROFILER%STEP - PTSTEP ! TPROFILER%T_CUR = TPROFILER%T_CUR + PTSTEP ! -CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY, & - TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY,& - TDTEXP%TIME,ZTIMEEXP) +CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) IF ( TPROFILER%T_CUR >= TPROFILER%STEP - 1.E-10 ) THEN GSTORE = .TRUE. TPROFILER%T_CUR = TPROFILER%T_CUR - TPROFILER%STEP diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 70a16b2c2..e3d2c0340 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -129,18 +129,19 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE !! 08/06/2010 (G. Tanguy) replace GRIBEX by GRIB_API : change !! of all the subroutine !! 05/12/2016 (G.Delautier) length of HGRID for grib_api > 1.14 +!! 08/03/2018 (P.Wautelet) replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS !------------ ! +USE MODE_DATETIME USE MODE_FM, ONLY: IO_FILE_CLOSE_ll USE MODE_IO_ll, ONLY: UPCASE USE MODE_MSG USE MODE_TIME USE MODE_THERMO ! -USE MODI_ADD_FORECAST_TO_DATE USE MODI_READ_HGRID_n USE MODI_READ_VER_GRID USE MODI_XYTOLATLON @@ -1386,10 +1387,7 @@ SELECT CASE (CSTEPUNIT) ! Time unit indicator CASE DEFAULT WRITE (ILUOUT0,'(A,A,A)') ' | error CSTEPUNIT=',CSTEPUNIT, ' is different of s,m or h' END SELECT -CALL ADD_FORECAST_TO_DATE(TPTCUR%TDATE%YEAR, & - TPTCUR%TDATE%MONTH,& - TPTCUR%TDATE%DAY, & - TPTCUR%TIME ) +CALL DATETIME_CORRECTDATE(TPTCUR) IF (HFILE(1:3)=='ATM') THEN CALL SM_PRINT_TIME(TPTCUR,TLUOUT0,'MESONH current date') TDTCUR = TPTCUR diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90 index b63eb705e..7685fc3c6 100644 --- a/src/MNH/rel_forcingn.f90 +++ b/src/MNH/rel_forcingn.f90 @@ -89,7 +89,8 @@ END MODULE MODI_REL_FORCING_n !! !! MODIFICATIONS !! ------------- -!! Original 08/11/10 +!! Original 08/11/10 +!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE !! !------------------------------------------------------------------------------- ! @@ -104,11 +105,11 @@ USE MODD_PARAMETERS USE MODD_RELFRC_n ! Modules for time evolving advfrc USE MODD_TIME ! +USE MODE_DATETIME USE MODE_IO_ll ! USE MODI_BUDGET USE MODI_SHUMAN -USE MODI_TEMPORAL_DIST USE MODI_TEMPORAL_LT ! IMPLICIT NONE @@ -204,18 +205,10 @@ ELSE ILUOUT0 = TLUOUT0%NLU WRITE(UNIT=ILUOUT0,FMT='(" THE REL FORCING FIELDS ARE INTERPOLATED NOW" ,& & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX_REL,JXP - CALL TEMPORAL_DIST ( TDTRELFRC(JXP)%TDATE%YEAR,TDTRELFRC(JXP)%TDATE%MONTH, & - TDTRELFRC(JXP)%TDATE%DAY ,TDTRELFRC(JXP)%TIME, & - TDTRELFRC(JSX_REL)%TDATE%YEAR ,TDTRELFRC(JSX_REL)%TDATE%MONTH, & - TDTRELFRC(JSX_REL)%TDATE%DAY ,TDTRELFRC(JSX_REL)%TIME, & - ZSDTJX ) + CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TDTRELFRC(JXP),ZSDTJX) END IF ! - CALL TEMPORAL_DIST ( TPDTCUR%TDATE%YEAR ,TPDTCUR%TDATE%MONTH, & - TPDTCUR%TDATE%DAY ,TPDTCUR%TIME, & - TDTRELFRC(JSX_REL)%TDATE%YEAR,TDTRELFRC(JSX_REL)%TDATE%MONTH, & - TDTRELFRC(JSX_REL)%TDATE%DAY ,TDTRELFRC(JSX_REL)%TIME, & - ZDT ) + CALL DATETIME_DISTANCE(TDTRELFRC(JSX_REL),TPDTCUR,ZDT) ! ZALPHA = ZDT / ZSDTJX ! diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90 index 8a672ef38..455cb1c7c 100644 --- a/src/MNH/seriesn.f90 +++ b/src/MNH/seriesn.f90 @@ -43,6 +43,7 @@ !! Oct. 2011 : (P.Le Moigne) Surface series !! 06/2016 (G.Delautier) phasage surfex 8 !! 01/2018 (G.Delautier) SURFEX 8.1 +!! 03/2018 (P.Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -65,11 +66,11 @@ USE MODD_TIME_n, ONLY: TDTCUR ! SURFACE FIELDS USE MODI_GET_SURF_VAR_n ! -USE MODE_ll +USE MODE_DATETIME USE MODE_IO_ll +USE MODE_ll USE MODE_MSG ! -USE MODI_TEMPORAL_DIST USE MODD_MNH_SURFEX_n ! IMPLICIT NONE @@ -174,9 +175,7 @@ NSCOUNTD=NSCOUNTD+1 ! TZDTCUR=TDTCUR ! -CALL TEMPORAL_DIST(TZDTCUR%TDATE%YEAR,TZDTCUR%TDATE%MONTH,TZDTCUR%TDATE%DAY, & - TZDTCUR%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY, & - TDTEXP%TIME,XSTRAJT(NSCOUNTD,1)) +CALL DATETIME_DISTANCE(TDTEXP,TZDTCUR,XSTRAJT(NSCOUNTD,1)) XSDATIME(13,NSCOUNTD)= TZDTCUR%TDATE%YEAR XSDATIME(14,NSCOUNTD)= TZDTCUR%TDATE%MONTH XSDATIME(15,NSCOUNTD)= TZDTCUR%TDATE%DAY diff --git a/src/MNH/setlb_lg.f90 b/src/MNH/setlb_lg.f90 index d5a8f0f0f..1227d7518 100644 --- a/src/MNH/setlb_lg.f90 +++ b/src/MNH/setlb_lg.f90 @@ -48,6 +48,7 @@ !! MODIFICATIONS !! ------------- !! Original 22/06/01 +!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -62,8 +63,8 @@ USE MODD_GRID_n USE MODD_LG USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND ! +USE MODE_DATETIME USE MODE_ll -USE MODI_TEMPORAL_DIST ! IMPLICIT NONE ! @@ -81,11 +82,7 @@ REAL :: ZTEMP_DIST ! time from the begining of simulation CALL GET_DIM_EXT_ll('B',IIU,IJU) IKU=SIZE(XZZ,3) ! -CALL TEMPORAL_DIST(TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY, TDTCUR%TIME, & - TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH, & - TDTEXP%TDATE%DAY, TDTEXP%TIME, & - ZTEMP_DIST) +CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTEMP_DIST) ! IF ( CLBCX(1) /= "CYCL" .AND. LWEST_ll()) THEN DO JK=1,IKU diff --git a/src/MNH/stationn.f90 b/src/MNH/stationn.f90 index 27b5a9645..2c7d26fd4 100644 --- a/src/MNH/stationn.f90 +++ b/src/MNH/stationn.f90 @@ -89,6 +89,7 @@ END MODULE MODI_STATION_n !! P.Aumond 01/07/2011 : Add model levels !! C.Lac 04/2013 : Correction on the vertical levels !! C.Lac 04/2013 : Add I/J positioning +!! P.Wautelet 28/03/2018 : Replace TEMPORAL_DIST by DATETIME_DISTANCE !! !! -------------------------------------------------------------------------- ! @@ -105,10 +106,10 @@ USE MODD_GRID USE MODD_TIME USE MODD_CONF ! +USE MODE_DATETIME USE MODE_ll ! USE MODI_WATER_SUM -USE MODI_TEMPORAL_DIST ! ! ! @@ -202,9 +203,7 @@ IF ( TSTATION%T_CUR == XUNDEF ) TSTATION%T_CUR = TSTATION%STEP - PTSTEP ! TSTATION%T_CUR = TSTATION%T_CUR + PTSTEP ! -CALL TEMPORAL_DIST(TDTSEG%TDATE%YEAR,TDTSEG%TDATE%MONTH,TDTSEG%TDATE%DAY, & - TDTSEG%TIME,TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH,TDTEXP%TDATE%DAY,& - TDTEXP%TIME,ZTIMEEXP) +CALL DATETIME_DISTANCE(TDTEXP,TDTSEG,ZTIMEEXP) IF ( TSTATION%T_CUR >= TSTATION%STEP - 1.E-10 ) THEN GSTORE = .TRUE. TSTATION%T_CUR = TSTATION%T_CUR - TSTATION%STEP diff --git a/src/MNH/subtract_to_date.f90 b/src/MNH/subtract_to_date.f90 deleted file mode 100644 index 736c1e592..000000000 --- a/src/MNH/subtract_to_date.f90 +++ /dev/null @@ -1,136 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 balloon 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! ################################ - MODULE MODI_SUBTRACT_TO_DATE -! ################################ -INTERFACE - SUBROUTINE SUBTRACT_TO_DATE(KYEAR,KMONTH,KDAY,PSEC) -! -INTEGER, INTENT(INOUT) :: KYEAR ! year of date -INTEGER, INTENT(INOUT) :: KMONTH ! month of date -INTEGER, INTENT(INOUT) :: KDAY ! day of date -REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC - ! negative or positive -! -END SUBROUTINE SUBTRACT_TO_DATE -END INTERFACE -END MODULE MODI_SUBTRACT_TO_DATE -! -! ####################################################### - SUBROUTINE SUBTRACT_TO_DATE(KYEAR,KMONTH,KDAY,PSEC) -! ####################################################### -! -!!**** *SUBTRACT_TO_DATE* - finds the current date and hour from a date -!! -!! PURPOSE -!! ------- -!! -!! WARNING -!! -!! -----> Only correct for dates between 19900301 and 21000228 <----- -!! -!! The correct test should be: -!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN -!! -!!** METHOD -!! ------ -!! -!! A recursive method is used, removing one day ofter the other. -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! Book 2 (add_forecast_to_date) -!! -!! AUTHOR -!! ------ -!! -! G.Jaubert Meteo-France (from add_forecast_to_date) -!! -!! MODIFICATIONS -!! ------------- -!! Original 23/07/01 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -INTEGER, INTENT(INOUT) :: KYEAR ! year of date -INTEGER, INTENT(INOUT) :: KMONTH ! month of date -INTEGER, INTENT(INOUT) :: KDAY ! day of date -REAL, INTENT(INOUT) :: PSEC ! number of seconds since date at 00 UTC -! -!------------------------------------------------------------------------------- -! -!* 1. Return condition: PSEC >0 -! ------------------------- -! -DO - IF (PSEC >= 0.) EXIT -! -!------------------------------------------------------------------------------- -! -!* 2. remove one day -! -------------- -! - PSEC=PSEC+86400. -! -! -!* 2.1 first day of the month -! --------------------- -! - IF (KDAY==1) THEN - IF (KMONTH==1) THEN - KDAY=31 - KMONTH=12 - KYEAR=KYEAR-1 - ELSE - KMONTH=KMONTH-1 - SELECT CASE (KMONTH) - CASE(4,6,9,11) - KDAY=30 - CASE(1,3,5,7:8,10,12) - KDAY=31 - CASE(2) - IF (MOD(KYEAR,4)==0) THEN - KDAY=29 - ELSE - KDAY=28 - ENDIF - END SELECT - ENDIF -! -!* 2.2 Other days -! ---------- - ELSE - KDAY=KDAY-1 - ENDIF -! -!------------------------------------------------------------------------------- -! -!* 3. Recursive call -! -------------- -! -ENDDO -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE SUBTRACT_TO_DATE diff --git a/src/MNH/temporal_dist.f90 b/src/MNH/temporal_dist.f90 deleted file mode 100644 index 1061dadf4..000000000 --- a/src/MNH/temporal_dist.f90 +++ /dev/null @@ -1,251 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 operators 2006/05/18 13:07:25 -!----------------------------------------------------------------- -! ######################### - MODULE MODI_TEMPORAL_DIST -! ######################### -INTERFACE - SUBROUTINE TEMPORAL_DIST(KYEARF, KMONTHF, KDAYF, PSECF, & - KYEARI, KMONTHI, KDAYI, PSECI, & - PDIST ) -! -INTEGER, INTENT(IN) :: KYEARF ! year of Final date -INTEGER, INTENT(IN) :: KMONTHF ! month of Final date -INTEGER, INTENT(IN) :: KDAYF ! day of Final date -REAL, INTENT(IN) :: PSECF ! number of seconds since date at 00 UTC - ! of Final date -INTEGER, INTENT(IN) :: KYEARI ! year of Initial date -INTEGER, INTENT(IN) :: KMONTHI ! month of Initial date -INTEGER, INTENT(IN) :: KDAYI ! day of Initial date -REAL, INTENT(IN) :: PSECI ! number of seconds since date at 00 UTC - ! of Initial date -REAL, INTENT(OUT):: PDIST ! temporal distance in secunds between the final - ! and initial date -! -END SUBROUTINE TEMPORAL_DIST -! -END INTERFACE -! -END MODULE MODI_TEMPORAL_DIST -! -! ############################################################# - SUBROUTINE TEMPORAL_DIST(KYEARF, KMONTHF, KDAYF, PSECF, & - KYEARI, KMONTHI, KDAYI, PSECI, & - PDIST ) -! ############################################################# -! -!!**** *TEMPORAL_DIST* - finds the number of secunds between 2 dates -!! -!! PURPOSE -!! ------- -!! -!! WARNING -!! -!! -----> Only correct for dates between 19900301 and 21000228 <----- -!! -!! The correct test should be: -!! IF( ((MOD(KYEAR,4)==0).AND.(MOD(KYEAR,100)/=0)) .OR. (MOD(KYEAR,400)==0))THEN -!! -!!** METHOD -!! ------ -!! -!! A comparison term by term of the elements of the 2 dates is performed. -!! and the temporal distance between the 2 dates is then deduced. -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! -!! Book 2 -!! -!! AUTHOR -!! ------ -!! -! J.Stein Meteo-France -!! -!! MODIFICATIONS -!! ------------- -!! 06/08 P.Peyrille: Add case for differents years and -!! same month needed for more-than-1year simulations -!! Original 02/01/96 -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS -! -IMPLICIT NONE -! -!* 0.1 Declaration of arguments -! ------------------------ -INTEGER, INTENT(IN) :: KYEARF ! year of Final date -INTEGER, INTENT(IN) :: KMONTHF ! month of Final date -INTEGER, INTENT(IN) :: KDAYF ! day of Final date -REAL, INTENT(IN) :: PSECF ! number of seconds since date at 00 UTC - ! of Final date -INTEGER, INTENT(IN) :: KYEARI ! year of Initial date -INTEGER, INTENT(IN) :: KMONTHI ! month of Initial date -INTEGER, INTENT(IN) :: KDAYI ! day of Initial date -REAL, INTENT(IN) :: PSECI ! number of seconds since date at 00 UTC - ! of Initial date -REAL, INTENT(OUT):: PDIST ! temporal distance in secunds between the final - ! and initial date -! -!* 0.2 Declaration of local variables -! ------------------------------ -! -INTEGER :: IDAYS ! number of days between the two dates -INTEGER :: JMONTH,JYEAR ! loop index on months or years -! -!------------------------------------------------------------------------------- -! -!* 1. SAME YEARS AND SAME MONTHS -! -------------------------- -! -IF ( (KYEARF==KYEARI) .AND. (KMONTHF==KMONTHI) ) THEN - PDIST = ( KDAYF-KDAYI) * 86400. + PSECF - PSECI - ! check chronological order - IF (PDIST < 0.) PDIST=XUNDEF -END IF -! -!------------------------------------------------------------------------------- -! -!* 2. SAME YEARS AND DIFFERENT MONTHS -! ------------------------------- -! -IF ( (KYEARF==KYEARI) .AND. (KMONTHF/=KMONTHI) ) THEN - ! check chronological order - IF ( KMONTHF < KMONTHI ) THEN - PDIST=XUNDEF - RETURN - END IF - ! - ! cumulate the number of days for the months in between KMONTHF-1 and - ! KMONTHI - IDAYS = 0 - DO JMONTH = KMONTHI, KMONTHF-1 - SELECT CASE (JMONTH) - CASE(4,6,9,11) - IDAYS=IDAYS+30 - CASE(1,3,5,7:8,10,12) - IDAYS=IDAYS+31 - CASE(2) - IF (MOD(KYEARI,4)==0) THEN - IDAYS=IDAYS+29 - ELSE - IDAYS=IDAYS+28 - ENDIF - END SELECT - END DO - ! - ! compute the temporal distance - PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI - ! -END IF -! -!------------------------------------------------------------------------------- -! -!* 3. DIFFERENT YEARS AND DIFFERENT MONTHS -! ------------------------------------ -! -IF ( (KYEARF/=KYEARI) .AND. (KMONTHF/=KMONTHI) ) THEN - ! check chronological order - IF ( KYEARF < KYEARI ) THEN - PDIST=XUNDEF - RETURN - END IF - ! - ! cumulate the number of days for the months in between KMONTHI and - ! December - IDAYS = 0 - DO JMONTH = KMONTHI, 12 - SELECT CASE (JMONTH) - CASE(4,6,9,11) - IDAYS=IDAYS+30 - CASE(1,3,5,7:8,10,12) - IDAYS=IDAYS+31 - CASE(2) - IF (MOD(KYEARI,4)==0) THEN - IDAYS=IDAYS+29 - ELSE - IDAYS=IDAYS+28 - ENDIF - END SELECT - END DO - DO JMONTH = 1,KMONTHF-1 - SELECT CASE (JMONTH) - CASE(4,6,9,11) - IDAYS=IDAYS+30 - CASE(1,3,5,7:8,10,12) - IDAYS=IDAYS+31 - CASE(2) - IF (MOD(KYEARF,4)==0) THEN - IDAYS=IDAYS+29 - ELSE - IDAYS=IDAYS+28 - ENDIF - END SELECT - END DO - ! add the number of days corresponding to full years between the two dates - DO JYEAR=KYEARI+1, KYEARF-1 - IF (MOD(JYEAR,4)==0) THEN - IDAYS=IDAYS+366 - ELSE - IDAYS=IDAYS+365 - END IF - END DO - ! - ! compute the temporal distance - PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI - ! -END IF -! -!------------------------------------------------------------------------------- -! -! 4. DIFFERENT YEARS AND SAME MONTH -! ------------------------------------------------------------ -IF ( (KYEARF/=KYEARI) .AND. (KMONTHF==KMONTHI) ) THEN - ! check chronological order - IF ( KYEARF < KYEARI ) THEN - PDIST=XUNDEF - RETURN - END IF - ! - ! cumulate the number of days for the months in between KMONTHI and - ! December => IDAYS = 0 here - IDAYS = 0 - ! add the number of days corresponding to full years between the two dates - DO JYEAR=KYEARI+1, KYEARF-1 - IF (MOD(JYEAR,4)==0) THEN - IDAYS=IDAYS+366 - ELSE - IDAYS=IDAYS+365 - END IF - END DO - ! - ! compute the temporal distance - PDIST = ( IDAYS + KDAYF - KDAYI) * 86400. + PSECF - PSECI - ! -END IF - -! -! -! -! -! -!------------------------------------------------------------------------------- -! -END SUBROUTINE TEMPORAL_DIST diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90 index da1a269b3..9fa235897 100644 --- a/src/MNH/write_budget.f90 +++ b/src/MNH/write_budget.f90 @@ -129,6 +129,7 @@ END MODULE MODI_WRITE_BUDGET !! change of YCOMMENT !! 24/03/2014 (J.Escobar ) miss placed deallocate in RSV budget !! 11/09/2015 (C.Lac) Correction due to FIT temporal scheme +!! 28/03/2018 (P.Wautelet) Replace TEMPORAL_DIST by DATETIME_DISTANCE !! !! !------------------------------------------------------------------------------- @@ -139,6 +140,7 @@ USE MODD_BUDGET USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT ! +USE MODE_DATETIME USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT USE MODE_TIME @@ -146,7 +148,6 @@ USE MODE_TIME USE MODI_END_CART_COMPRESS USE MODI_END_MASK_COMPRESS USE MODI_MENU_DIACHRO -USE MODI_TEMPORAL_DIST USE MODI_WRITE_DIACHRO ! ! @@ -252,10 +253,7 @@ SELECT CASE (CBUTYPE) ZWORKDATIME(11,1)=TPDTMOD%TDATE%DAY ZWORKDATIME(12,1)=TPDTMOD%TIME ! - CALL TEMPORAL_DIST(TPDTCUR%TDATE%YEAR,TPDTCUR%TDATE%MONTH, & - TPDTCUR%TDATE%DAY, TPDTCUR%TIME, & - TDTEXP%TDATE%YEAR, TDTEXP%TDATE%MONTH, & - TDTEXP%TDATE%DAY, TDTEXP%TIME, ZWORKTEMP(1,1)) + CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(1,1)) ! ZWORKTEMP(1,1)=ZWORKTEMP(1,1)+(1.-NBUSTEP*0.5)*PTSTEP ! @@ -1011,10 +1009,7 @@ SELECT CASE (CBUTYPE) ZWORKDATIME(11,:)=TPDTMOD%TDATE%DAY ZWORKDATIME(12,:)=TPDTMOD%TIME ! - CALL TEMPORAL_DIST(TPDTCUR%TDATE%YEAR,TPDTCUR%TDATE%MONTH, & - TPDTCUR%TDATE%DAY, TPDTCUR%TIME, & - TDTEXP%TDATE%YEAR, TDTEXP%TDATE%MONTH, & - TDTEXP%TDATE%DAY, TDTEXP%TIME, ZWORKTEMP(NBUWRNB,1)) + CALL DATETIME_DISTANCE(TDTEXP,TPDTCUR,ZWORKTEMP(NBUWRNB,1)) ! ZWORKTEMP(NBUWRNB,1)=ZWORKTEMP(NBUWRNB,1)+(1.-NBUSTEP*0.5)*PTSTEP ! diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90 index 4bf731346..246d82af1 100644 --- a/src/MNH/write_ts1d.f90 +++ b/src/MNH/write_ts1d.f90 @@ -70,6 +70,7 @@ !! XCHEMLON could gives some profiles if specified in !! namelist DIAG1.nam. Otherwise treatment is active only in !! 1D case +!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE !! !! EXTERNAL !! -------- @@ -79,11 +80,13 @@ !! IMPLICIT ARGUMENTS !! ------------------ +USE MODE_DATETIME USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST USE MODE_IO_ll USE MODE_GRIDPROJ USE MODE_ll +! USE MODD_LUNIT_n, ONLY: CINIFILE USE MODD_NSV, ONLY: NSV,NSV_CHEMBEG,NSV_CHEMEND, & NSV_AERBEG,NSV_AEREND @@ -122,7 +125,6 @@ USE MODD_CH_JVALUES_n, ONLY: XJVALUES ! Jvalues and USE MODD_CH_INIT_JVALUES, ONLY:JPJVMAX ! their number USE MODD_PARAMETERS, ONLY: XUNDEF USE MODD_DIAG_FLAG, ONLY: LCHEMDIAG, XCHEMLAT, XCHEMLON -USE MODI_TEMPORAL_DIST USE MODI_TRANSFER_FILE IMPLICIT NONE @@ -165,11 +167,7 @@ CHARACTER*5 :: YCTIME ! current time TZFILE => NULL() NBPROF = 0 -CALL TEMPORAL_DIST ( TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & - TDTCUR%TDATE%DAY ,TDTCUR%TIME, & - TDTEXP%TDATE%YEAR,TDTEXP%TDATE%MONTH, & - TDTEXP%TDATE%DAY ,TDTEXP%TIME, & - ZTIME ) +CALL DATETIME_DISTANCE(TDTEXP,TDTCUR,ZTIME) ZTIME = ZTIME + TDTEXP%TIME CALL GET_DIM_EXT_ll ('B',IIU,IJU) -- GitLab