Changeset 4549


Ignore:
Timestamp:
May 29, 2020 9:27:29 AM (4 years ago)
Author:
raasch
Message:

bugfix for r4539: values for min/max/rms stored in separate arrays

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/cpulog_mod.f90

    r4539 r4549  
    2525! -----------------
    2626! $Id$
     27! bugfix for r4539: values for min/max/rms stored in separate arrays
     28!
     29! 4539 2020-05-18 14:05:17Z raasch
    2730! code re-structured,
    2831! cpu time per grid point and timestep does not included initialization and spinup any more
     
    280283       REAL(dp)       ::  average_cputime  !<
    281284       REAL(dp), SAVE ::  norm = 1.0_dp    !<
    282        REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_max        !<
    283        REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_min        !<
    284        REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_rms        !<
    285        REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_tmp        !<
    286        REAL(dp), DIMENSION(:),   ALLOCATABLE ::  sum           !<
    287        REAL(dp), DIMENSION(:,:), ALLOCATABLE ::  pe_log_points !<
     285       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_max          !<
     286       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_max_s        !<
     287       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_min          !<
     288       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_min_s        !<
     289       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_rms          !<
     290       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_rms_s        !<
     291       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_tmp          !<
     292       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  pe_tmp_s        !<
     293       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  sum             !<
     294       REAL(dp), DIMENSION(:),   ALLOCATABLE ::  sum_s           !<
     295       REAL(dp), DIMENSION(:,:), ALLOCATABLE ::  pe_log_points   !<
     296       REAL(dp), DIMENSION(:,:), ALLOCATABLE ::  pe_log_points_s !<
    288297
    289298
     
    372381       IF ( myid == 0 )  THEN
    373382!
    374 !--       Initialize temporary arrays needed for statistics
    375           pe_min = log_point_s%sum
    376           pe_max = log_point_s%sum    ! need to be set in case of 1 PE
    377           pe_rms = 0.0_dp
     383!--       Allocate and initialize temporary arrays needed for statistics
     384          ALLOCATE( pe_max_s( SIZE( log_point_s ) ), pe_min_s( SIZE( log_point_s ) ),              &
     385                    pe_rms_s( SIZE( log_point_s ) ), pe_tmp_s( SIZE( log_point_s ) ),              &
     386                    pe_log_points_s( SIZE( log_point_s ), 0:numprocs-1 ) )
     387          pe_min_s = log_point_s%sum
     388          pe_max_s = log_point_s%sum    ! need to be set in case of 1 PE
     389          pe_rms_s = 0.0_dp
    378390
    379391#if defined( __parallel )
     
    381393!--       Receive data from all PEs
    382394          DO  i = 1, numprocs-1
    383              CALL MPI_RECV( pe_tmp(1), SIZE( log_point ), MPI_DOUBLE_PRECISION, MPI_ANY_SOURCE,    &
    384                             MPI_ANY_TAG, comm2d, status, ierr )
     395             CALL MPI_RECV( pe_tmp_s(1), SIZE( log_point_s ), MPI_DOUBLE_PRECISION,                &
     396                            MPI_ANY_SOURCE, MPI_ANY_TAG, comm2d, status, ierr )
    385397             sender = status(MPI_SOURCE)
    386              pe_log_points(:,sender) = pe_tmp
     398             pe_log_points_s(:,sender) = pe_tmp_s
    387399          ENDDO
    388           pe_log_points(:,0) = log_point_s%sum   ! Results from PE0
     400          pe_log_points_s(:,0) = log_point_s%sum   ! Results from PE0
    389401!
    390402!--       Calculate mean of all PEs, store it on log_point_s%sum
    391403!--       and find minimum and maximum
    392           DO  iii = 1, SIZE( log_point )
     404          DO  iii = 1, SIZE( log_point_s )
    393405             DO  i = 1, numprocs-1
    394                 log_point_s(iii)%sum = log_point_s(iii)%sum + pe_log_points(iii,i)
    395                 pe_min(iii) = MIN( pe_min(iii), pe_log_points(iii,i) )
    396                 pe_max(iii) = MAX( pe_max(iii), pe_log_points(iii,i) )
     406                log_point_s(iii)%sum = log_point_s(iii)%sum + pe_log_points_s(iii,i)
     407                pe_min_s(iii) = MIN( pe_min_s(iii), pe_log_points_s(iii,i) )
     408                pe_max_s(iii) = MAX( pe_max_s(iii), pe_log_points_s(iii,i) )
    397409             ENDDO
    398410             log_point_s(iii)%sum = log_point_s(iii)%sum / numprocs
     
    400412!--          Calculate rms
    401413             DO  i = 0, numprocs-1
    402                 pe_rms(iii) = pe_rms(iii) + ( pe_log_points(iii,i) - log_point_s(iii)%sum )**2
     414                pe_rms_s(iii) = pe_rms_s(iii) + ( pe_log_points_s(iii,i) - log_point_s(iii)%sum )**2
    403415             ENDDO
    404              pe_rms(iii) = SQRT( pe_rms(iii) / numprocs )
     416             pe_rms_s(iii) = SQRT( pe_rms_s(iii) / numprocs )
    405417          ENDDO
    406418       ELSE
     
    408420!--       Send data to PE0 (pe_max is used as temporary storage to send
    409421!--       the data in order to avoid sending the data type log)
    410           pe_max = log_point_s%sum
    411           CALL MPI_SEND( pe_max(1), SIZE( log_point ), MPI_DOUBLE_PRECISION, 0, 0, comm2d, ierr )
     422          ALLOCATE( pe_max_s( SIZE( log_point_s ) ) )
     423          pe_max_s = log_point_s%sum
     424          CALL MPI_SEND( pe_max_s(1), SIZE( log_point_s ), MPI_DOUBLE_PRECISION, 0, 0, comm2d,     &
     425                         ierr )
    412426#endif
    413427
     
    470484!
    471485!--       Re-store sums
     486          ALLOCATE( sum_s( SIZE( log_point_s ) ) )
    472487          WHERE ( log_point_s%counts /= 0 )
    473              sum = log_point_s%sum
     488             sum_s = log_point_s%sum
    474489          ELSEWHERE
    475              sum = -1.0_dp
     490             sum_s = -1.0_dp
    476491          ENDWHERE
    477492
     
    480495          WRITE ( 18, 101 )
    481496          DO
    482              ii = MAXLOC( sum )
     497             ii = MAXLOC( sum_s )
    483498             i = ii(1)
    484              IF ( sum(i) /= -1.0_dp )  THEN
     499             IF ( sum_s(i) /= -1.0_dp )  THEN
    485500                WRITE ( 18, 102 )  log_point_s(i)%place, log_point_s(i)%sum,                       &
    486501                                   log_point_s(i)%sum / log_point(1)%sum * 100.0_dp,               &
    487                                    log_point_s(i)%counts, pe_min(i), pe_max(i), pe_rms(i)
    488                 sum(i) = -1.0_dp
     502                                   log_point_s(i)%counts, pe_min_s(i), pe_max_s(i), pe_rms_s(i)
     503                sum_s(i) = -1.0_dp
    489504             ELSE
    490505                EXIT
Note: See TracChangeset for help on using the changeset viewer.