diff --git a/src/MNH/mode_mnh_timing.f90 b/src/MNH/mode_mnh_timing.f90 index 23c09916f99873b55b4e47dba0c2a45538611ad8..8e5d22de008da8a71dd69d319979362ed90506ac 100644 --- a/src/MNH/mode_mnh_timing.f90 +++ b/src/MNH/mode_mnh_timing.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-2024 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. @@ -13,6 +13,7 @@ MODULE MODE_MNH_TIMING ! 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 ! P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing +! P. Wautelet 23/09/2024: improve slightly TIME_STAT_ll !------------------------------------------------------------------------ implicit none @@ -92,7 +93,7 @@ end subroutine set_iluout_timing !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ######################################## - SUBROUTINE TIME_STAT_ll(PRES, PSUM, HPRINT, HSEP,HFULL) + SUBROUTINE TIME_STAT_ll(PRES, PSUM, HPRINT, HSEP, OFULL) ! ######################################## ! !* 0. DECLARATIONS @@ -109,13 +110,13 @@ end subroutine set_iluout_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 + LOGICAL, OPTIONAL, INTENT(IN) :: OFULL !To write detailed stats on file ! !* 0.2 Declarations of local variables : ! INTEGER,PARAMETER :: NSTAT=5 - INTEGER :: INFO,IROOT,JP + INTEGER :: INFO, JP CHARACTER(len=30) :: VIDE = "" CHARACTER(len=30) :: FILE = "" INTEGER :: IC @@ -124,23 +125,27 @@ end subroutine set_iluout_timing REAL(kind=MNHTIME), DIMENSION(2,NPROC) :: ZSTAT_ALL INTEGER, DIMENSION(NPROC) :: IND INTEGER :: ILU + LOGICAL :: GFULL ! !------------------------------------------------------------------------------- + IF ( PRESENT( OFULL) ) THEN + GFULL = OFULL + ELSE + GFULL = .FALSE. + END IF ! -!* 1. CALL THE MPI_ALLREDUCE ROUTINE +!* 1. CALL THE MPI_ALLGATHER ROUTINE ! ------------------------------ -INFO = -1 -! 1.1 Sum(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHTIME_MPI, & - MPI_SUM, NMNH_COMM_WORLD, INFO) -! 1.2 Sum/Proc + CALL MPI_ALLGATHER( PRES(:), 2, MNHTIME_MPI, ZSTAT_ALL(:,:), 2, MNHTIME_MPI, NMNH_COMM_WORLD, INFO ) + + ! 1.1 Sum(Proc) + ZSTAT(:,1) = SUM( ZSTAT_ALL(:,:), DIM=2 ) + ! 1.2 Sum/Proc ZSTAT(:,2) = ZSTAT(:,1 ) / NPROC -! 1.3 Min(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHTIME_MPI, & - MPI_MIN, NMNH_COMM_WORLD, INFO) + ! 1.3 Min(Proc) + ZSTAT(:,3) = MINVAL( ZSTAT_ALL(:,:), DIM=2 ) ! 1.4 Max(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHTIME_MPI, & - MPI_MAX, NMNH_COMM_WORLD, INFO) + ZSTAT(:,4) = MAXVAL( ZSTAT_ALL(:,:), DIM=2 ) IF (.NOT.PRESENT(HPRINT)) THEN @@ -162,12 +167,8 @@ INFO = -1 WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| CPUTIME ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:) WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| ELAPSED ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:) - IF (PRESENT(HFULL)) THEN - ! gather all data + IF ( GFULL ) THEN !CALL TIMING_SEPARATOR(HSEP) - IROOT = 0 - 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)) DO IC=1,LEN_trim(FILE) diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index a438833a6c019fb5577c25994b7655d21c0db34b..7c7b289d9fa9a70d7b8b96d7c1578376d0693b8a 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -484,6 +484,8 @@ LOGICAL, INTENT(INOUT) :: OEXIT ! Switch for the end of th ! !* 0.2 declarations of local variables ! +LOGICAL, PARAMETER :: GFULLSTAT_PRESS_SLV = .TRUE. ! To write detailed stats of pressure solver in files +! INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER :: IIU,IJU,IKU ! array size in first, second and third dimensions INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain @@ -2420,16 +2422,16 @@ IF (OEXIT) THEN ! CALL TIMING_LEGEND() ! - CALL TIME_STAT_ll(XT_PRESS,ZTOT, ' PRESSURE ','=','F') + CALL TIME_STAT_ll( XT_PRESS, ZTOT, ' PRESSURE ', '=', GFULLSTAT_PRESS_SLV ) !JUAN Z_SPLITTING - CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SX_YP2_ZP1,ZTOT, ' REMAP B=>FFTXZ' ,'-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1,ZTOT, ' REMAP FFTXZ=>FFTYZ' ,'-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_B,ZTOT, ' REMAP FTTYZ=>B' ,'-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z,ZTOT, ' REMAP FFTYZ=>SUBZ' ,'-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SXP2_Y_ZP1,ZTOT, ' REMAP B=>FFTYZ-1','-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1,ZTOT, ' REMAP SUBZ=>FFTYZ-1','-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1,ZTOT, ' REMAP FFTYZ-1=>FFTXZ-1','-','F') - CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_B,ZTOT, ' REMAP FFTXZ-1=>B ' ,'-','F') + CALL TIME_STAT_ll( TIMEZ%T_MAP_B_SX_YP2_ZP1, ZTOT, ' REMAP B=>FFTXZ' , '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1, ZTOT, ' REMAP FFTXZ=>FFTYZ' , '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SXP2_Y_ZP1_B, ZTOT, ' REMAP FTTYZ=>B' , '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z, ZTOT, ' REMAP FFTYZ=>SUBZ' , '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_B_SXP2_Y_ZP1, ZTOT, ' REMAP B=>FFTYZ-1', '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1, ZTOT, ' REMAP SUBZ=>FFTYZ-1', '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1, ZTOT, ' REMAP FFTYZ-1=>FFTXZ-1', '-', GFULLSTAT_PRESS_SLV ) + CALL TIME_STAT_ll( TIMEZ%T_MAP_SX_YP2_ZP1_B, ZTOT, ' REMAP FFTXZ-1=>B ' , '-', GFULLSTAT_PRESS_SLV ) ! JUAN P1/P2 CALL TIME_STAT_ll(XT_CLOUD,ZTOT, ' RESOLVED_CLOUD','=') CALL TIME_STAT_ll(XT_ELEC,ZTOT, ' RESOLVED_ELEC','=')