diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 06488a688da32b42a2c908e729dc7d9457a34a5c..518d37f046263b17e9a9462ff376aa8d63daf637 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -89,6 +89,7 @@ !! V.Vionnet 07/2017 add LWIND_CONTRAV !! 11/2017 (D. Ricard, P. Marquet) add diagnostics for THETAS ! P. Wautelet 11/02/2019: added missing use of MODI_CH_MONITOR_n +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -124,7 +125,7 @@ USE MODD_PARAM_LIMA, ONLY: LLIMA_DIAG USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PARAM_RAD_n -use modd_precision, only: LFIINT +use modd_precision, only: LFIINT, MNHTIME USE MODD_PROFILER_n USE MODD_RADAR USE MODD_RADIATIONS_n @@ -185,9 +186,9 @@ CHARACTER (LEN=4) :: YTURB ! initial flag to call to turbulence schemes CHARACTER (LEN=40) :: YFMT,YFMT2! format for cpu analysis printing INTEGER :: IRESP ! return code in FM routines INTEGER :: ILUOUT0 ! Logical unit number for the output listing -REAL*8,DIMENSION(2) :: ZTIME0,ZTIME1,ZTIME2,ZRAD,ZDCONV,ZSHADOWS,ZGROUND, & - ZTRACER,ZDRAG,ZTURB,ZMAFL,ZCHEM,ZTIME_BU ! CPU time -REAL*8,DIMENSION(2) :: ZSTART,ZINIT,ZWRIT,ZBALL,ZPHYS,ZSURF,ZWRITS,ZTRAJ ! storing variables +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME0, ZTIME1, ZTIME2, ZRAD, ZDCONV, ZSHADOWS, ZGROUND, & + ZTRACER, ZDRAG, ZTURB, ZMAFL, ZCHEM, ZTIME_BU ! CPU times +REAL(kind=MNHTIME), DIMENSION(2) :: ZSTART, ZINIT, ZWRIT, ZBALL, ZPHYS, ZSURF, ZWRITS, ZTRAJ ! storing variables INTEGER(KIND=LFIINT) :: INPRAR ! number of articles predicted in the LFIFM file LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file INTEGER :: ISTEPBAL ! loop indice for balloons and aircraft @@ -676,18 +677,18 @@ END IF !* call to physics monitor ! GCLOSE_OUT=.TRUE. -ZRAD=0. -ZSHADOWS=0. -ZDCONV=0. -ZGROUND=0. -ZTRACER=0. -ZTURB=0. -ZDRAG=0. -ZMAFL=0. -ZCHEM=0. -XTIME_LES=0. -XTIME_LES_BU_PROCESS=0. -XTIME_BU_PROCESS=0. +ZRAD = 0.0_MNHTIME +ZSHADOWS = 0.0_MNHTIME +ZDCONV = 0.0_MNHTIME +ZGROUND = 0.0_MNHTIME +ZTRACER = 0.0_MNHTIME +ZTURB = 0.0_MNHTIME +ZDRAG = 0.0_MNHTIME +ZMAFL = 0.0_MNHTIME +ZCHEM = 0.0_MNHTIME +XTIME_LES = 0.0_MNHTIME +XTIME_LES_BU_PROCESS = 0.0_MNHTIME +XTIME_BU_PROCESS = 0.0_MNHTIME CALL PHYS_PARAM_n(1,TOUTDATAFILE,GCLOSE_OUT, & ZRAD,ZSHADOWS,ZDCONV,ZGROUND,ZMAFL,ZDRAG, & ZTURB,ZTRACER, ZTIME_BU,ZWETDEPAER,GMASKkids,GCLOUD_ONLY) diff --git a/src/MNH/diagnos_les_mf.f90 b/src/MNH/diagnos_les_mf.f90 index 2f2cecafcc1a1a9b72075a2d2983090f00d4c35a..31fa13da74a1fc2c0444f1495a15a465801a4214 100644 --- a/src/MNH/diagnos_les_mf.f90 +++ b/src/MNH/diagnos_les_mf.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2009-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ########################### MODULE MODI_DIAGNOS_LES_MF ! ########################### @@ -20,10 +21,10 @@ INTERFACE ! !* 1.1 Declaration of Arguments ! -! +use modd_precision, only: MNHTIME ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES +REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP @@ -74,20 +75,23 @@ END MODULE MODI_DIAGNOS_LES_MF !! AUTHOR !! ------ !! J.pergaud -!! V.Masson : Optimization 09/2010 +! +! Modifications: +! V. Masson 09/2010: Optimization +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! USE MODD_LES +use modd_precision, only: MNHTIME +! +USE MODE_MNH_TIMING ! USE MODI_LES_VER_INT USE MODI_LES_MEAN_ll USE MODI_SHUMAN -!JUANZ -USE MODE_MNH_TIMING -!JUANZ ! IMPLICIT NONE @@ -95,7 +99,7 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES +REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP @@ -119,7 +123,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHLUP_MF_LES,ZRTUP_MF_LES, & ZWUP_MF_LES,ZFRACUP_MF_LES, & ZTHVUP_MF_LES,ZRVUP_MF_LES, & ZRIUP_MF_LES -REAL*8,DIMENSION(2) :: ZTIME1, ZTIME2 +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2 !------------------------------------------------------------------------ ! diff --git a/src/MNH/flat_invz.f90 b/src/MNH/flat_invz.f90 index e253264a9e229a59c4c9bf7f3caedfe1283b4167..b7b38a84621ae4f99a90aba6f437f0b71b6b6f78 100644 --- a/src/MNH/flat_invz.f90 +++ b/src/MNH/flat_invz.f90 @@ -1,12 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 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$ $Date$ -!----------------------------------------------------------------- ! #################### MODULE MODI_FLAT_INVZ ! #################### @@ -130,13 +126,15 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !! points under the ground and out of the domain !! Modification Lugato, Guivarch (June 1998) Parallelisation !! Escobar, Stein (July 2000) optimisation +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! - USE MODD_PARAMETERS USE MODD_CONF + USE MODD_PARAMETERS + use modd_precision, only: MNHTIME ! USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll @@ -258,7 +256,7 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YT ! array in Y slices distribution transpose REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YRT ! array in Y slices distribution transpose ! - REAL*8,DIMENSION(2) :: T0,T1 + REAL(kind=MNHTIME), DIMENSION(2) :: ZT0,ZT1 !JUAN Z_SPLITTING ! ! @@ -481,13 +479,13 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ print*,"IP=",IP," SIZE(ZBAND_SXP1_YP2_Z)=",SIZE(ZBAND_SXP1_YP2_Z,1),SIZE(ZBAND_SXP1_YP2_Z,2) ZBAND_SXP1_YP2_Z = ZY_B (IIBI:IIEI,IJBI:IJEI,:) ZBAND_SX_YP2_ZP1 = 0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP1_YP2_Z_SX_YP2_ZP1_ll(ZBAND_SXP1_YP2_Z,ZBAND_SX_YP2_ZP1,IINFO_ll) !CALL REMAP_B_SX_YP2_ZP1_ll(ZBAND_B,ZBAND_SX_YP2_ZP1,IINFO_ll) !ZWORK_SX_YP2_ZP1 = ZWORK_SX_YP2_ZP1 - ZBAND_SX_YP2_ZP1 - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_B_SX_YP2_ZP1 = TIMEZ%T_MAP_B_SX_YP2_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_B_SX_YP2_ZP1 = TIMEZ%T_MAP_B_SX_YP2_ZP1 + ZT1 - ZT0 END IF ! NZ_SPLITTING ! !JUAN Z_SPLITTING @@ -527,10 +525,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & IIMAX,ILOT_SX_YP2_ZP1,-1 ) END IF ZBAND_SXP2_Y_ZP1=0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SX_YP2_ZP1_SXP2_Y_ZP1_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP2_Y_ZP1,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + ZT1 - ZT0 END IF ! NZ_SPLITTING ! !JUAN Z_SPLITTING @@ -612,10 +610,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ IF (( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,16) > 0 ) ) THEN !!$ CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1) !!$ ZBAND_B = 0.0 -!!$ CALL SECOND_MNH2(T0) +!!$ CALL SECOND_MNH2(ZT0) !!$ CALL REMAP_SXP2_Y_ZP1_B_ll(ZBAND_SXP2_Y_ZP1,ZBAND_B,IINFO_ll) -!!$ CALL SECOND_MNH2(T1) -!!$ TIMEZ.T_MAP_SXP2_Y_ZP1_B = TIMEZ.T_MAP_SXP2_Y_ZP1_B + T1 - T0 +!!$ CALL SECOND_MNH2(ZT1) +!!$ TIMEZ.T_MAP_SXP2_Y_ZP1_B = TIMEZ.T_MAP_SXP2_Y_ZP1_B + ZT1 - ZT0 !!$ ! !!$ ! singular matrix case : the last term is computed by setting the !!$ ! average of the pressure field equal to zero. @@ -646,10 +644,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,8) > 0 )) THEN CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1) ZBAND_SXP2_YP1_Z = 0.0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_Y_ZP1_SXP2_YP1_Z_ll(ZBAND_SXP2_Y_ZP1,ZBAND_SXP2_YP1_Z,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + ZT1 - ZT0 ! ! singular matrix case : the last term is computed by setting the ! average of the pressure field equal to zero. @@ -718,19 +716,19 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !!$ IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND.( IAND(NZ_SPLITTING,16) > 0 ) ) THEN !!$ ! -!!$ CALL SECOND_MNH2(T0) +!!$ CALL SECOND_MNH2(ZT0) !!$ CALL REMAP_B_SXP2_Y_ZP1_ll(ZBAND_BR,ZBAND_SXP2_Y_ZP1R,IINFO_ll) -!!$ CALL SECOND_MNH2(T1) -!!$ TIMEZ.T_MAP_B_SXP2_Y_ZP1 = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + T1 - T0 +!!$ CALL SECOND_MNH2(ZT1) +!!$ TIMEZ.T_MAP_B_SXP2_Y_ZP1 = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + ZT1 - ZT0 !!$ ENDIF ! JUAN P1/P2 SPLITTING IF ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,8) > 0 ) ) THEN ! - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1R,IINFO_ll) !TEST CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1RBIS,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + ZT1 - ZT0 ENDIF IF ( IAND(NZ_SPLITTING,2) > 0 ) THEN CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1R,ZBAND_SXP2_Y_ZP1RT,II_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,IK_SXP2_Y_ZP1) @@ -754,10 +752,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & ! Transposition Y-> X ! ZBAND_SX_YP2_ZP1=0 - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) CALL REMAP_SXP2_Y_ZP1_SX_YP2_ZP1_ll(ZBAND_SXP2_Y_ZP1R,ZBAND_SX_YP2_ZP1,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + ZT1 - ZT0 ! IF (HLBCX(1) == 'CYCL') THEN ! re-set (N+1) values with (2) values ( stored here to avoid to lost them ) @@ -787,11 +785,11 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, & !JUAN Z_SPLITTING ! IF ( IAND(NZ_SPLITTING,2) > 0 ) THEN - CALL SECOND_MNH2(T0) + CALL SECOND_MNH2(ZT0) !CALL REMAP_SX_YP2_ZP1_B_ll(ZBAND_SX_YP2_ZP1,ZBAND_B,IINFO_ll) CALL REMAP_SX_YP2_ZP1_SXP1_YP2_Z_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP1_YP2_Z,IINFO_ll) - CALL SECOND_MNH2(T1) - TIMEZ%T_MAP_SX_YP2_ZP1_B = TIMEZ%T_MAP_SX_YP2_ZP1_B + T1 - T0 + CALL SECOND_MNH2(ZT1) + TIMEZ%T_MAP_SX_YP2_ZP1_B = TIMEZ%T_MAP_SX_YP2_ZP1_B + ZT1 - ZT0 IF ( IAND(NZ_SPLITTING,1) > 0 ) THEN ! for test save 2D value CALL GET_HALO(ZBAND_B) diff --git a/src/MNH/modd_precision.f90 b/src/MNH/modd_precision.f90 index 421eec5f6984ce01e0753ccf97ddfcbecdc21723..e302e46b96e79d9a950ebb5a1cf3f9f39db68547 100644 --- a/src/MNH/modd_precision.f90 +++ b/src/MNH/modd_precision.f90 @@ -7,6 +7,7 @@ ! P. Wautelet 08/03/2019 ! Modifications: ! P. Wautelet 22/03/2019: add MNHINT/REAL32/64_MPI, MNH2REAL32/64_MPI + more public parameters +! P. Wautelet 27/03/2019: add MNHTIME and MNHTIME_MPI !----------------------------------------------------------------- module modd_precision @@ -28,6 +29,7 @@ public :: MNH2REAL32_MPI, MNH2REAL64_MPI public :: MNHINT, MNHREAL public :: MNHINT_MPI, MNHREAL_MPI, MNH2REAL_MPI +public :: MNHTIME, MNHTIME_MPI public :: LFIINT @@ -80,6 +82,9 @@ integer, parameter :: MNHREAL_MPI = MPI_REAL16 #error "Invalid MNH_REAL" #endif +integer, parameter :: MNHTIME = MNHREAL64 +integer, parameter :: MNHTIME_MPI = MNHREAL64_MPI + ! Kinds for LFI #if ( LFI_INT == 4 ) diff --git a/src/MNH/modd_sub_modeln.f90 b/src/MNH/modd_sub_modeln.f90 index 48bfede318410cd24a6a6431857a57c50da89ed0..b6e364b2222e189bce38a1b8f00314c1b815b2bc 100644 --- a/src/MNH/modd_sub_modeln.f90 +++ b/src/MNH/modd_sub_modeln.f90 @@ -4,17 +4,19 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! Modifications: -! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -! J. Escobar : 18/06/2018 , bug compile R*4 => real*8 pointer XT_VISC +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! J. Escobar 18/06/2018: bug compile R*4 => real*8 pointer XT_VISC ! P. Wautelet 08/02/2019: add missing NULL association for pointers +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !----------------------------------------------------------------- ! ################# MODULE MODD_SUB_MODEL_n ! ################# ! -USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll -! -USE MODD_PARAMETERS, ONLY: JPMODELMAX +USE MODD_ARGSLIST_ll, ONLY: LIST_ll, HALO2LIST_ll +USE MODD_PARAMETERS, ONLY: JPMODELMAX +use modd_precision, only: MNHTIME + IMPLICIT NONE TYPE SUB_MODEL_t @@ -32,18 +34,18 @@ TYPE SUB_MODEL_t TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll => NULL() TYPE(HALO2LIST_ll), POINTER :: TZHALO2SC_ll => NULL() INTEGER :: IBAK, IOUT ! number of the backup / output - REAL*8,DIMENSION(2) :: XT_START - REAL*8,DIMENSION(2) :: XT_STORE,XT_BOUND,XT_GUESS - REAL*8,DIMENSION(2) :: XT_ADV,XT_SOURCES,XT_DRAG - REAL*8,DIMENSION(2) :: XT_ADVUVW,XT_GRAV,XT_VISC - REAL*8,DIMENSION(2) :: XT_DIFF,XT_RELAX,XT_PARAM,XT_SPECTRA - REAL*8,DIMENSION(2) :: XT_HALO,XT_RAD_BOUND,XT_PRESS - REAL*8,DIMENSION(2) :: XT_CLOUD,XT_STEP_SWA,XT_STEP_MISC - REAL*8,DIMENSION(2) :: XT_ELEC - REAL*8,DIMENSION(2) :: XT_COUPL,XT_1WAY,XT_STEP_BUD - REAL*8,DIMENSION(2) :: XT_RAD,XT_DCONV,XT_GROUND,XT_TRACER,XT_MAFL - REAL*8,DIMENSION(2) :: XT_TURB,XT_2WAY,XT_SHADOWS - REAL*8,DIMENSION(2) :: XT_FORCING,XT_NUDGING,XT_CHEM + REAL(kind=MNHTIME), DIMENSION(2) :: XT_START + REAL(kind=MNHTIME), DIMENSION(2) :: XT_STORE, XT_BOUND, XT_GUESS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADV, XT_SOURCES, XT_DRAG + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADVUVW, XT_GRAV, XT_VISC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_DIFF, XT_RELAX, XT_PARAM, XT_SPECTRA + REAL(kind=MNHTIME), DIMENSION(2) :: XT_HALO, XT_RAD_BOUND, XT_PRESS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_CLOUD, XT_STEP_SWA, XT_STEP_MISC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_ELEC + REAL(kind=MNHTIME), DIMENSION(2) :: XT_COUPL, XT_1WAY, XT_STEP_BUD + REAL(kind=MNHTIME), DIMENSION(2) :: XT_RAD, XT_DCONV, XT_GROUND, XT_TRACER, XT_MAFL + REAL(kind=MNHTIME), DIMENSION(2) :: XT_TURB, XT_2WAY, XT_SHADOWS + REAL(kind=MNHTIME), DIMENSION(2) :: XT_FORCING, XT_NUDGING, XT_CHEM REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL() ! Vertical motion used for ACTivation/NUCleation @@ -60,19 +62,19 @@ TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll=>NULL(), TZLSHALO2_ll=>NULL() TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll=>NULL(), TZHALO2MT_ll=>NULL(), TZHALO2SC_ll=>NULL() INTEGER, POINTER :: IBAK=>NULL() INTEGER, POINTER :: IOUT=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_START=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_STORE=>NULL(),XT_BOUND=>NULL(),XT_GUESS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ADV=>NULL(),XT_SOURCES=>NULL(),XT_DRAG=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(),XT_GRAV=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_DIFF=>NULL(),XT_RELAX=>NULL(),XT_PARAM=>NULL(),XT_SPECTRA=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_HALO=>NULL(),XT_RAD_BOUND=>NULL(),XT_PRESS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_VISC=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_CLOUD=>NULL(),XT_STEP_SWA=>NULL(),XT_STEP_MISC=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_ELEC=>NULL(),XT_SHADOWS=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_COUPL=>NULL(),XT_1WAY=>NULL(),XT_STEP_BUD=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_RAD=>NULL(),XT_DCONV=>NULL(),XT_GROUND=>NULL(),XT_MAFL=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_TURB=>NULL(),XT_2WAY=>NULL(),XT_TRACER=>NULL() -REAL*8,DIMENSION(:), POINTER :: XT_FORCING=>NULL(),XT_NUDGING=>NULL(),XT_CHEM=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_START=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_STORE=>NULL(), XT_BOUND=>NULL(), XT_GUESS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADV=>NULL(), XT_SOURCES=>NULL(), XT_DRAG=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(), XT_GRAV=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_DIFF=>NULL(), XT_RELAX=>NULL(), XT_PARAM=>NULL(), XT_SPECTRA=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_HALO=>NULL(), XT_RAD_BOUND=>NULL(), XT_PRESS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_VISC=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_CLOUD=>NULL(), XT_STEP_SWA=>NULL(), XT_STEP_MISC=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ELEC=>NULL(), XT_SHADOWS=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_COUPL=>NULL(), XT_1WAY=>NULL(), XT_STEP_BUD=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_RAD=>NULL(), XT_DCONV=>NULL(), XT_GROUND=>NULL(), XT_MAFL=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_TURB=>NULL(), XT_2WAY=>NULL(), XT_TRACER=>NULL() +REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_FORCING=>NULL(), XT_NUDGING=>NULL(), XT_CHEM=>NULL() REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL() LOGICAL, DIMENSION(:,:), POINTER :: GMASKkids=>NULL() LOGICAL, POINTER :: GCLOSE_OUT=>NULL() diff --git a/src/MNH/modd_timez.f90 b/src/MNH/modd_timez.f90 index 9c9235ed4da7b7779e6ac6cbd3007a64e2b62dff..3c44998639d52ba7647196195ecb8080f404c027 100644 --- a/src/MNH/modd_timez.f90 +++ b/src/MNH/modd_timez.f90 @@ -5,51 +5,54 @@ !----------------------------------------------------------------- ! Modifications ! P. Wautelet 08/02/2019: add missing NULL association for pointers +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +!----------------------------------------------------------------- MODULE MODD_TIMEZ USE MODD_PARAMETERS, ONLY: JPMODELMAX + use modd_precision, only: MNHTIME TYPE SUB_TIMEZ_T - REAL*8,DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = 0.0 - - REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1 = 0.0 - REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z = 0.0 - - REAL*8,DIMENSION(2) :: T_WRIT3D_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_WRIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT3D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_WRIT2D_GATH = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT2D_WRIT = 0.0 - REAL*8,DIMENSION(2) :: T_WRIT2D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READ3D_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_READ3D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READ2D_SCAT = 0.0 - REAL*8,DIMENSION(2) :: T_READ2D_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READ2D_ALL = 0.0 - - REAL*8,DIMENSION(2) :: T_READLB_RECV = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_SEND = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_READ = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_WAIT = 0.0 - REAL*8,DIMENSION(2) :: T_READLB_ALL = 0.0 - + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1 = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WRIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_GATH = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_WRIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_SCAT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_ALL = 0.0_MNHTIME + + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_RECV = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_SEND = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_READ = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_WAIT = 0.0_MNHTIME + REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_ALL = 0.0_MNHTIME + END TYPE SUB_TIMEZ_T TYPE(SUB_TIMEZ_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: SUB_TIMEZN diff --git a/src/MNH/mode_mnh_timing.f90 b/src/MNH/mode_mnh_timing.f90 index 9d0c5b0cf76d0b57982c278ba8faff1765e59e3f..8c1afe17147344f67c73d91da6b129272dfbbf28 100644 --- a/src/MNH/mode_mnh_timing.f90 +++ b/src/MNH/mode_mnh_timing.f90 @@ -11,25 +11,33 @@ MODULE MODE_MNH_TIMING ! J. Escobar 12/02/2013: triabulle too slow on large BG partition, inhib it by a early return in the code ! P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN ! P. Wautelet 22/03/2019: use MNHREAL64 and MNHREAL64_MPI + typo corrections +! P. Wautelet 27/03/2019: use MNHTIME and MNHTIME_MPI instead of MNHREAL64 and MNHREAL64_MPI ! -INTEGER :: NLUOUT_TIMING +implicit none + +private + +public :: SECOND_MNH2, SET_ILUOUT_TIMING, TIME_HEADER_ll, TIME_STAT_ll +public :: TIMING_SEPARATOR, TIMING_LEGEND + +INTEGER :: NLUOUT_TIMING CONTAINS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +subroutine second_mnh2(xt) -SUBROUTINE SECOND_MNH2(XT) -! USE modd_mpif -! -REAL*8,DIMENSION(2) :: XT -! -CALL CPU_TIME(XT(1)) -XT(2) = MPI_Wtime() -END SUBROUTINE SECOND_MNH2 +use modd_precision, only: MNHTIME + +real(kind=MNHTIME),dimension(2) :: xt + +call cpu_time( xt(1) ) +xt(2) = MPI_WTIME() +end subroutine second_mnh2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -86,18 +94,18 @@ END SUBROUTINE SECOND_MNH2 !* 0. DECLARATIONS ! USE MODD_MPIF - use modd_precision, only: MNHREAL64, MNHREAL64_MPI + use modd_precision, only: MNHTIME, MNHTIME_MPI USE MODD_VAR_ll, ONLY: IP, NMNH_COMM_WORLD, NPROC ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - REAL(kind=MNHREAL64), DIMENSION(:), INTENT(IN) :: PRES ! (1)=CPU & (2)=ELAPSED Processes Timing - REAL(kind=MNHREAL64), DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSED) Timing - CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HPRINT - CHARACTER , OPTIONAL, INTENT(IN) :: HSEP - CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HFULL + REAL(kind=MNHTIME), DIMENSION(:), INTENT(IN) :: PRES ! (1)=CPU & (2)=ELAPSED Processes Timing + REAL(kind=MNHTIME), DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSED) Timing + CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HPRINT + CHARACTER , OPTIONAL, INTENT(IN) :: HSEP + CHARACTER(len=*), OPTIONAL, INTENT(IN) :: HFULL ! !* 0.2 Declarations of local variables : ! @@ -108,8 +116,8 @@ END SUBROUTINE SECOND_MNH2 CHARACTER(len=30) :: FILE = "" INTEGER :: IC - REAL(kind=MNHREAL64), DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Percent(1) - REAL(kind=MNHREAL64), DIMENSION(2,NPROC) :: ZSTAT_ALL + REAL(kind=MNHTIME), DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Percent(1) + REAL(kind=MNHTIME), DIMENSION(2,NPROC) :: ZSTAT_ALL INTEGER, DIMENSION(NPROC) :: IND INTEGER :: ILU ! @@ -119,15 +127,15 @@ END SUBROUTINE SECOND_MNH2 ! ------------------------------ INFO = -1 ! 1.1 Sum(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHREAL64_MPI, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHTIME_MPI, & MPI_SUM, NMNH_COMM_WORLD, INFO) ! 1.2 Sum/Proc ZSTAT(:,2) = ZSTAT(:,1 ) / NPROC ! 1.3 Min(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHREAL64_MPI, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHTIME_MPI, & MPI_MIN, NMNH_COMM_WORLD, INFO) ! 1.4 Max(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHREAL64_MPI, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHTIME_MPI, & MPI_MAX, NMNH_COMM_WORLD, INFO) @@ -154,7 +162,7 @@ INFO = -1 ! gather all data !CALL TIMING_SEPARATOR(HSEP) IROOT = 0 - CALL MPI_GATHER(PRES(:),2,MNHREAL64_MPI,ZSTAT_ALL(:,1),2,MNHREAL64_MPI,& + CALL MPI_GATHER(PRES(:),2,MNHTIME_MPI,ZSTAT_ALL(:,1),2,MNHTIME_MPI,& IROOT,NMNH_COMM_WORLD, INFO) IF (IP.EQ.1) THEN FILE = trim(adjustl(HPRINT)) @@ -187,12 +195,12 @@ INFO = -1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine triabulle(vec,ind) -use modd_precision, only: MNHREAL64 +use modd_precision, only: MNHTIME implicit none -real(kind=MNHREAL64), dimension(:), intent(inout) :: vec -integer, dimension(:), intent(out) :: ind +real(kind=MNHTIME), dimension(:), intent(inout) :: vec +integer, dimension(:), intent(out) :: ind logical :: a integer :: i diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index a903c134fac224153fbdb1462f1b5942baefb0fa..c8cb87d01b35fe78fa53eff85c02c3334efe7b74 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1,6 +1,6 @@ -!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! ################### @@ -254,6 +254,7 @@ END MODULE MODI_MODEL_n !! Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll ! to allow to disable writes (for bench purposes) !! 02/2019 C.Lac add rain fraction as an output field +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -322,6 +323,7 @@ USE MODD_PARAM_MFSHALL_n USE MODD_PARAM_n USE MODD_PAST_FIELD_n USE MODD_PRECIP_n +use modd_precision, only: MNHTIME USE MODD_PROFILER_n USE MODD_RADIATIONS_n, ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN @@ -440,9 +442,8 @@ INTEGER :: IVERB ! LFI verbosity level LOGICAL :: GSTEADY_DMASS ! conditional call to mass computation ! ! for computing time analysis -REAL*8,DIMENSION(2) :: ZTIME,ZTIME1,ZTIME2,ZEND,ZTOT,ZALL,ZTOT_PT -! -REAL*8,DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME, ZTIME1, ZTIME2, ZEND, ZTOT, ZALL, ZTOT_PT +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS CHARACTER :: YMI INTEGER :: IPOINTS CHARACTER(len=16) :: YTCOUNT,YPOINTS @@ -707,45 +708,45 @@ IF (KTCOUNT == 1) THEN ! ! ! - XT_START = 0.0 - ! - XT_STORE = 0.0 - XT_BOUND = 0.0 - XT_GUESS = 0.0 - XT_FORCING = 0.0 - XT_NUDGING = 0.0 - XT_ADV = 0.0 - XT_ADVUVW = 0.0 - XT_GRAV = 0.0 - XT_SOURCES = 0.0 + XT_START = 0.0_MNHTIME + ! + XT_STORE = 0.0_MNHTIME + XT_BOUND = 0.0_MNHTIME + XT_GUESS = 0.0_MNHTIME + XT_FORCING = 0.0_MNHTIME + XT_NUDGING = 0.0_MNHTIME + XT_ADV = 0.0_MNHTIME + XT_ADVUVW = 0.0_MNHTIME + XT_GRAV = 0.0_MNHTIME + XT_SOURCES = 0.0_MNHTIME ! - XT_DIFF = 0.0 - XT_RELAX = 0.0 - XT_PARAM = 0.0 - XT_SPECTRA = 0.0 - XT_HALO = 0.0 - XT_VISC = 0.0 - XT_RAD_BOUND = 0.0 - XT_PRESS = 0.0 + XT_DIFF = 0.0_MNHTIME + XT_RELAX = 0.0_MNHTIME + XT_PARAM = 0.0_MNHTIME + XT_SPECTRA = 0.0_MNHTIME + XT_HALO = 0.0_MNHTIME + XT_VISC = 0.0_MNHTIME + XT_RAD_BOUND = 0.0_MNHTIME + XT_PRESS = 0.0_MNHTIME ! - XT_CLOUD = 0.0 - XT_STEP_SWA = 0.0 - XT_STEP_MISC = 0.0 - XT_COUPL = 0.0 - XT_1WAY = 0.0 - XT_STEP_BUD = 0.0 + XT_CLOUD = 0.0_MNHTIME + XT_STEP_SWA = 0.0_MNHTIME + XT_STEP_MISC = 0.0_MNHTIME + XT_COUPL = 0.0_MNHTIME + XT_1WAY = 0.0_MNHTIME + XT_STEP_BUD = 0.0_MNHTIME ! - XT_RAD = 0.0 - XT_DCONV = 0.0 - XT_GROUND = 0.0 - XT_TURB = 0.0 - XT_MAFL = 0.0 - XT_DRAG = 0.0 - XT_TRACER = 0.0 - XT_SHADOWS = 0.0 - XT_ELEC = 0.0 - XT_CHEM = 0.0 - XT_2WAY = 0.0 + XT_RAD = 0.0_MNHTIME + XT_DCONV = 0.0_MNHTIME + XT_GROUND = 0.0_MNHTIME + XT_TURB = 0.0_MNHTIME + XT_MAFL = 0.0_MNHTIME + XT_DRAG = 0.0_MNHTIME + XT_TRACER = 0.0_MNHTIME + XT_SHADOWS = 0.0_MNHTIME + XT_ELEC = 0.0_MNHTIME + XT_CHEM = 0.0_MNHTIME + XT_2WAY = 0.0_MNHTIME ! END IF ! diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90 index 106ec1623adf6772a63f57eca3e0692aacce497d..e2d454fe789405a36c559a4be58753f627ee3aab 100644 --- a/src/MNH/phys_paramn.f90 +++ b/src/MNH/phys_paramn.f90 @@ -1,9 +1,10 @@ -!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1995-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ######################## - MODULE MODI_PHYS_PARAM_n + MODULE MODI_PHYS_PARAM_n ! ######################## ! ! @@ -13,18 +14,17 @@ INTERFACE PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER, & PTIME_BU, PWETDEPAER, OMASKkids,OCLOUD_ONLY ) ! -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: TFILEDATA +use modd_precision, only: MNHTIME ! INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file LOGICAL, INTENT(IN) :: OCLOSE_OUT! conditional closure of the ! OUTPUT FM-file -! advection schemes -REAL*8,DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU - ! time for computing time - -REAL*8,DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets - ! statistics +! advection schemes +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU + ! time for computing time +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for @@ -230,8 +230,9 @@ END MODULE MODI_PHYS_PARAM_n !! C.Lac 10/2017 : ch_monitor and aer_monitor extracted from phys_param !! to be called directly by modeln as the last process !! 02/2018 Q.Libois ECRAD -!! 28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -293,6 +294,7 @@ USE MODD_PARAM_MFSHALL_n USE MODI_SHALLOW_MF_PACK USE MODD_CLOUD_MF_n USE MODD_ADV_n, ONLY : XRTKEMS +use modd_precision, only: MNHTIME ! USE MODI_SURF_RAD_MODIF USE MODI_GROUND_PARAM_n @@ -347,11 +349,10 @@ INTEGER, INTENT(IN) :: KTCOUNT ! temporal iteration count TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Synchronous output file LOGICAL, INTENT(IN) :: OCLOSE_OUT! conditional closure of the ! OUTPUT FM-file -! advection schemes -REAL*8,DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU - ! time for computing time - ! statistics -REAL*8,DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets +! advection schemes +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU + ! time for computing time +REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU ! time used in budget&LES budgets statistics REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PWETDEPAER LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for @@ -403,8 +404,8 @@ REAL :: ZRAD_GLOB_ll ! 'real' global parallel mask of 'GRAD' INTEGER :: INFO_ll ! error report of parallel routines ! the only cloudy columns ! -REAL*8,DIMENSION(2) :: ZTIME1,ZTIME2,ZTIME3,ZTIME4 ! for computing time analysis -REAL*8,DIMENSION(2) :: ZTIME_LES_MF ! time spent in LES computation in shallow conv. +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZTIME3, ZTIME4 ! for computing time analysis +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_LES_MF ! time spent in LES computation in shallow conv. LOGICAL :: GDCONV ! conditionnal call for the deep convection ! computations REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRC, ZRI, ZWT ! additional dummies @@ -454,12 +455,12 @@ IKB = 1 + JPVEXT IKE = IKU - JPVEXT CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ! -ZTIME1 = 0.0 -ZTIME2 = 0.0 -ZTIME3 = 0.0 -ZTIME4 = 0.0 -PTIME_BU = 0. -ZTIME_LES_MF = 0.0 +ZTIME1 = 0.0_MNHTIME +ZTIME2 = 0.0_MNHTIME +ZTIME3 = 0.0_MNHTIME +ZTIME4 = 0.0_MNHTIME +PTIME_BU = 0._MNHTIME +ZTIME_LES_MF = 0.0_MNHTIME PWETDEPAER(:,:,:,:) = 0. ! !* allocation of variables used in more than one parameterization diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index e1581455a68f6831e5e4968e92f2987f46e577b6..63ee062ea8fbf731eca2a00fc85288835fc9e26b 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -310,7 +310,8 @@ !! 06/2016 (G.Delautier) phasage surfex 8 !! P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define !! 01/2018 (G.Delautier) SURFEX 8.1 -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -349,7 +350,7 @@ USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILE_DUMMY,TFILE_OUTPUTLISTING USE MODD_CONF_n USE MODD_NSV, ONLY : NSV,NSV_CHEM, & NSV_DSTEND, NSV_DSTBEG -use modd_precision, only: LFIINT, MNHREAL_MPI +use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME ! USE MODN_BLANK ! @@ -554,7 +555,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,& REAL :: ZDIST ! !JUAN TIMING -REAL*8,DIMENSION(2) :: ZTIME1,ZTIME2,ZEND,ZTOT +REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZEND, ZTOT CHARACTER :: YMI INTEGER :: IMI INTEGER::JK @@ -622,8 +623,8 @@ CALL VERSION CPROGRAM='IDEAL ' ! !JUAN TIMING - XT_START = 0.0 - XT_STORE = 0.0 + XT_START = 0.0_MNHTIME + XT_STORE = 0.0_MNHTIME ! CALL SECOND_MNH2(ZEND) ! diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90 index ba519f8e3eefe4a15b9471ff07ebca2530fea29c..46f477b19b6c3a075f09ff98c06cddce86260c80 100644 --- a/src/MNH/shallow_mf_pack.f90 +++ b/src/MNH/shallow_mf_pack.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 2010-2018 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2010-2019 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!----------------------------------------------------------------- ! ###################### MODULE MODI_SHALLOW_MF_PACK ! ###################### @@ -21,10 +22,11 @@ INTERFACE PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) ! ################################################################# !! -USE MODD_IO_ll, ONLY: TFILEDATA -! +USE MODD_IO_ll, ONLY: TFILEDATA +use modd_precision, only: MNHTIME +! !* 1.1 Declaration of Arguments -! +! ! INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. @@ -39,7 +41,7 @@ LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for synchronous LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the ! MF fluxes in the synchronous FM-file TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations +REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep @@ -110,32 +112,35 @@ END MODULE MODI_SHALLOW_MF_PACK !! AUTHOR !! ------ !! V.Masson 09/2010 -!! Modification R. Honnert 07/2012 : introduction of vertical wind -!! for the height of the thermal -!! M. Leriche 02/2017 : avoid negative values for sv tendencies -!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O -!! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF -!! -------------------------------------------------------------------------- +! -------------------------------------------------------------------------- +! Modifications: +! R. Honnert 07/2012: introduction of vertical wind for the height of the thermal +! M. Leriche 02/2017: avoid negative values for sv tendencies +! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O +! S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF +! P. Wautelet 28/03/2019: use MNHTIME for time measurement variables +! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS -USE MODD_CST +USE MODD_BUDGET USE MODD_CONF +USE MODD_CST USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_NSV +USE MODD_PARAMETERS USE MODD_PARAM_ICE, ONLY : CFRAC_ICE_SHALLOW_MF USE MODD_PARAM_MFSHALL_n -USE MODD_BUDGET +use modd_precision, only: MNHTIME USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FMWRIT -USE MODI_SHALLOW_MF USE MODI_BUDGET -USE MODI_SHUMAN USE MODI_DIAGNOS_LES_MF +USE MODI_SHALLOW_MF +USE MODI_SHUMAN ! IMPLICIT NONE @@ -156,7 +161,7 @@ LOGICAL, INTENT(IN) :: OCLOSE_OUT ! switch for synchronous LOGICAL, INTENT(IN) :: OMF_FLX ! switch to write the ! MF fluxes in the synchronous FM-file TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file -REAL*8,DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations +REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT) :: PTIME_LES ! time spent in LES computations REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep