diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90 index af3bc1eb87a956fbe623abe584000e150197cefe..0d1de4a1616acc850cbc6d264e7ce3fbcb78e9f8 100644 --- a/src/MNH/statprof_tools.f90 +++ b/src/MNH/statprof_tools.f90 @@ -9,6 +9,7 @@ !----------------------------------------------------------------- ! Modifications: ! P. Wautelet 30/09/2022: bugfix: use XUNDEF from SURFEX for surface variables computed by SURFEX +! P. Wautelet 25/11/2022: rewrite STATPROF_INSTANT algorithm (does not depends on model timestep anymore => independent of model) !----------------------------------------------------------------- ! ################### MODULE MODE_STATPROF_TOOLS @@ -729,10 +730,9 @@ END FUNCTION STATPROF_INTERP_3D_V ! ################################################# SUBROUTINE STATPROF_INSTANT( TPSTATPROF_TIME, KIN ) ! ################################################# - USE MODD_DYN_n, ONLY: XTSTEP - USE MODD_PARAMETERS, ONLY: XUNDEF USE MODD_TIME_n, ONLY: TDTCUR + USE MODE_DATETIME USE MODE_MSG IMPLICIT NONE @@ -740,24 +740,26 @@ SUBROUTINE STATPROF_INSTANT( TPSTATPROF_TIME, KIN ) TYPE(TSTATPROFTIME), INTENT(INOUT) :: TPSTATPROF_TIME INTEGER, INTENT(OUT) :: KIN ! Current step of storage - IF ( TPSTATPROF_TIME%XTIME_CUR == XUNDEF ) TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTSTEP - XTSTEP - - TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR + XTSTEP - - IF ( TPSTATPROF_TIME%XTIME_CUR >= TPSTATPROF_TIME%XTSTEP - 1.E-10 ) THEN - TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR - TPSTATPROF_TIME%XTSTEP - TPSTATPROF_TIME%N_CUR = TPSTATPROF_TIME%N_CUR + 1 - KIN = TPSTATPROF_TIME%N_CUR + IF ( TPSTATPROF_TIME%N_CUR == 0 ) THEN + ! First store + TPSTATPROF_TIME%N_CUR = 1 + TPSTATPROF_TIME%TPDATES(1) = TDTCUR + KIN = 1 + ELSE + IF ( TDTCUR - TPSTATPROF_TIME%TPDATES(TPSTATPROF_TIME%N_CUR) >= TPSTATPROF_TIME%XTSTEP - 1.E-6 ) THEN + TPSTATPROF_TIME%N_CUR = TPSTATPROF_TIME%N_CUR + 1 + KIN = TPSTATPROF_TIME%N_CUR - IF ( KIN < 1 .OR. KIN > SIZE( TPSTATPROF_TIME%TPDATES ) ) THEN - CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STATPROF_INSTANT', 'problem with step of storage' ) - KIN = -2 + IF ( KIN < 1 .OR. KIN > SIZE( TPSTATPROF_TIME%TPDATES ) ) THEN + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STATPROF_INSTANT', 'problem with step of storage' ) + KIN = -2 + ELSE + TPSTATPROF_TIME%TPDATES(KIN) = TDTCUR + END IF ELSE - TPSTATPROF_TIME%TPDATES(KIN) = TDTCUR + ! Return an invalid step number + KIN = -1 END IF - ELSE - ! Return an invalid step number - KIN = -1 END IF END SUBROUTINE STATPROF_INSTANT