diff --git a/src/MNH/mode_mnh_timing.f90 b/src/MNH/mode_mnh_timing.f90 index 35d7c559ad4193581e19a2e885659d9287214e37..9d0c5b0cf76d0b57982c278ba8faff1765e59e3f 100644 --- a/src/MNH/mode_mnh_timing.f90 +++ b/src/MNH/mode_mnh_timing.f90 @@ -2,13 +2,15 @@ !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. +!------------------------------------------------------------------------ MODULE MODE_MNH_TIMING ! -! Modification : -! J.ESCOBAR 13/11/2008 : change (2) in (:) for bug in IBM-SP6 compiler -! J.Escobar 1/09/2011 : reduce 'timing' format -! J.Escobar 12/02/2013 : tribulle to slow on large BG partition , inhib it by a early return in the code -! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN +! Modifications: +! J. escobar 13/11/2008: change (2) in (:) for bug in IBM-SP6 compiler +! J. Escobar 01/09/2011: reduce 'timing' format +! 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 ! INTEGER :: NLUOUT_TIMING @@ -53,7 +55,7 @@ END SUBROUTINE SECOND_MNH2 SUBROUTINE TIMING_LEGEND() CALL TIMING_SEPARATOR('-') - WRITE(NLUOUT_TIMING,FMT="( '| CPUTIM/ELAPSE |& + WRITE(NLUOUT_TIMING,FMT="( '| CPUTIME/ELAPSED |& &| SUM(PROC) |MEAN(PROC)| MIN(PROC | MAX(PROC)| PERCENT %|')" ) CALL TIMING_SEPARATOR('-') END SUBROUTINE TIMING_LEGEND @@ -84,33 +86,30 @@ END SUBROUTINE SECOND_MNH2 !* 0. DECLARATIONS ! USE MODD_MPIF - USE MODD_VAR_ll, ONLY : MPI_PRECISION, NPROC, IP - !JUANZ - USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD - !JUANZ + use modd_precision, only: MNHREAL64, MNHREAL64_MPI + USE MODD_VAR_ll, ONLY: IP, NMNH_COMM_WORLD, NPROC ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! - REAL*8,DIMENSION(:), INTENT(IN) :: PRES ! (1)=CPU & (2)=ELAPSE Proccessors Timing -! - REAL*8,DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSE) Timing -! - CHARACTER(len=*), INTENT(IN),OPTIONAL :: HPRINT - CHARACTER , INTENT(IN),OPTIONAL :: HSEP - CHARACTER(len=*), INTENT(IN),OPTIONAL :: HFULL + 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 ! !* 0.2 Declarations of local variables : ! INTEGER,PARAMETER :: NSTAT=5 - REAL*8,DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Purcent(1) + INTEGER :: INFO,IROOT,JP CHARACTER(len=30) :: VIDE = "" - CHARACTER(len=30) :: FILE = "" + CHARACTER(len=30) :: FILE = "" INTEGER :: IC - REAL*8,DIMENSION(2,NPROC) :: ZSTAT_ALL + 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 INTEGER, DIMENSION(NPROC) :: IND INTEGER :: ILU ! @@ -120,15 +119,15 @@ END SUBROUTINE SECOND_MNH2 ! ------------------------------ INFO = -1 ! 1.1 Sum(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHREAL64_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, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHREAL64_MPI, & MPI_MIN, NMNH_COMM_WORLD, INFO) ! 1.4 Max(Proc) - CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MPI_REAL8, & + CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHREAL64_MPI, & MPI_MAX, NMNH_COMM_WORLD, INFO) @@ -138,8 +137,8 @@ INFO = -1 ! ELSEIF ( ZSTAT(1,1) > 0.0 ) THEN - ! use Psum , for print stat & pourcent - ! Purcent + ! use Psum , for print stat & percent + ! Percent WHERE ( PSUM /= 0.0 ) ZSTAT(:,5) = 100.0 * ZSTAT(:,1) / PSUM(:) ELSEWHERE @@ -148,14 +147,14 @@ INFO = -1 ! print stat ! IF (PRESENT(HSEP)) CALL TIMING_SEPARATOR(HSEP) - WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| CPUTIM ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:) - WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| ELAPSE ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:) + 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 !CALL TIMING_SEPARATOR(HSEP) IROOT = 0 - CALL MPI_GATHER(PRES(:),2,MPI_REAL8,ZSTAT_ALL(:,1),2,MPI_REAL8,& + CALL MPI_GATHER(PRES(:),2,MNHREAL64_MPI,ZSTAT_ALL(:,1),2,MNHREAL64_MPI,& IROOT,NMNH_COMM_WORLD, INFO) IF (IP.EQ.1) THEN FILE = trim(adjustl(HPRINT)) @@ -188,17 +187,17 @@ INFO = -1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine triabulle(vec,ind) -implicit none - -real*8 , intent(inout) :: vec(:) -integer, intent(out) :: ind(:) +use modd_precision, only: MNHREAL64 +implicit none -integer :: n +real(kind=MNHREAL64), dimension(:), intent(inout) :: vec +integer, dimension(:), intent(out) :: ind logical :: a integer :: i integer :: mem +integer :: n n = size(vec) a = .true. @@ -207,7 +206,7 @@ do i=1,n enddo return -!JUAN TO SLOW ON BG !!! +!JUAN TOO SLOW ON BG !!! do while (a) a=.false.