LCOV - code coverage report
Current view: top level - mpi - mpi_reduce_tool.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 42 72 58.3 %
Date: 2024-04-27 04:44:07 Functions: 7 12 58.3 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------
       2             : ! Copyright (c) 2023 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
       3             : ! This file is part of FLEUR and available as free software under the conditions
       4             : ! of the MIT license as expressed in the LICENSE file in more detail.
       5             : !--------------------------------------------------------------------------------
       6             : 
       7             : MODULE m_mpi_reduce_tool
       8             : 
       9             :    USE m_juDFT
      10             : #ifdef CPP_MPI
      11             :    USE mpi
      12             : #endif
      13             : 
      14             :    IMPLICIT NONE
      15             :    PRIVATE
      16             :   
      17             :    INTERFACE mpi_sum_reduce
      18             :       MODULE PROCEDURE mpi_sum_reduce_int1, mpi_sum_reduce_int2, mpi_sum_reduce_int3
      19             :       MODULE PROCEDURE mpi_sum_reduce_real1, mpi_sum_reduce_real2, mpi_sum_reduce_real3
      20             :       MODULE PROCEDURE mpi_sum_reduce_complex1, mpi_sum_reduce_complex2, mpi_sum_reduce_complex3
      21             :    END INTERFACE mpi_sum_reduce
      22             : 
      23             :    INTERFACE mpi_lor_reduce
      24             :       MODULE PROCEDURE mpi_lor_reduce_bool1, mpi_lor_reduce_bool2, mpi_lor_reduce_bool3
      25             :    END INTERFACE mpi_lor_reduce
      26             :    
      27             :    PUBLIC :: mpi_sum_reduce, mpi_lor_reduce
      28             :    
      29             :    CONTAINS
      30             :    
      31             :    ! INTEGER SUBROUTINES:
      32             :    
      33           0 :    SUBROUTINE mpi_sum_reduce_int1(sourceArray, targetArray, mpi_comm)
      34             :       IMPLICIT NONE
      35             :       INTEGER, INTENT(IN)    :: sourceArray(:)
      36             :       INTEGER, INTENT(INOUT) :: targetArray(:)
      37             :       INTEGER, INTENT(IN)    :: mpi_comm
      38             : 
      39             :       INTEGER :: ierr=0
      40             :       INTEGER :: length
      41             : 
      42           0 :       length = SIZE(sourceArray)
      43           0 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
      44             : 
      45             : #ifdef CPP_MPI
      46           0 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_INTEGER, MPI_SUM, 0, mpi_comm, ierr)
      47             : #else
      48             :       targetArray(:) = sourceArray(:)
      49             : #endif
      50           0 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
      51           0 :    END SUBROUTINE mpi_sum_reduce_int1
      52             :    
      53           0 :    SUBROUTINE mpi_sum_reduce_int2(sourceArray, targetArray, mpi_comm)
      54             :       IMPLICIT NONE
      55             :       INTEGER, INTENT(IN)    :: sourceArray(:,:)
      56             :       INTEGER, INTENT(INOUT) :: targetArray(:,:)
      57             :       INTEGER, INTENT(IN)    :: mpi_comm
      58             : 
      59             :       INTEGER :: ierr=0
      60             :       INTEGER :: length
      61             : 
      62           0 :       length = SIZE(sourceArray)
      63           0 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
      64             : 
      65             : #ifdef CPP_MPI
      66           0 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_INTEGER, MPI_SUM, 0, mpi_comm, ierr)
      67             : #else
      68             :       targetArray(:,:) = sourceArray(:,:)
      69             : #endif
      70           0 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
      71           0 :    END SUBROUTINE mpi_sum_reduce_int2
      72             :    
      73         160 :    SUBROUTINE mpi_sum_reduce_int3(sourceArray, targetArray, mpi_comm)
      74             :       IMPLICIT NONE
      75             :       INTEGER, INTENT(IN)    :: sourceArray(:,:,:)
      76             :       INTEGER, INTENT(INOUT) :: targetArray(:,:,:)
      77             :       INTEGER, INTENT(IN)    :: mpi_comm
      78             : 
      79             :       INTEGER :: ierr=0
      80             :       INTEGER :: length
      81             : 
      82         640 :       length = SIZE(sourceArray)
      83         640 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
      84             : 
      85             : #ifdef CPP_MPI
      86         160 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_INTEGER, MPI_SUM, 0, mpi_comm, ierr)
      87             : #else
      88             :       targetArray(:,:,:) = sourceArray(:,:,:)
      89             : #endif
      90         160 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
      91         160 :    END SUBROUTINE mpi_sum_reduce_int3
      92             :    
      93             :    ! REAL SUBROUTINES:
      94             :    
      95         320 :    SUBROUTINE mpi_sum_reduce_real1(sourceArray, targetArray, mpi_comm)
      96             :       IMPLICIT NONE
      97             :       REAL,    INTENT(IN)    :: sourceArray(:)
      98             :       REAL,    INTENT(INOUT) :: targetArray(:)
      99             :       INTEGER, INTENT(IN)    :: mpi_comm
     100             : 
     101             :       INTEGER :: ierr=0
     102             :       INTEGER :: length
     103             : 
     104         320 :       length = SIZE(sourceArray)
     105         320 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     106             : 
     107             : #ifdef CPP_MPI
     108         320 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_PRECISION, MPI_SUM, 0, mpi_comm, ierr)
     109             : #else
     110             :       targetArray(:) = sourceArray(:)
     111             : #endif
     112         320 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     113         320 :    END SUBROUTINE mpi_sum_reduce_real1
     114             : 
     115        6492 :    SUBROUTINE mpi_sum_reduce_real2(sourceArray, targetArray, mpi_comm)
     116             :       IMPLICIT NONE
     117             :       REAL,    INTENT(IN)    :: sourceArray(:,:)
     118             :       REAL,    INTENT(INOUT) :: targetArray(:,:)
     119             :       INTEGER, INTENT(IN)    :: mpi_comm
     120             : 
     121             :       INTEGER :: ierr=0
     122             :       INTEGER :: length
     123             : 
     124       19476 :       length = SIZE(sourceArray)
     125       19476 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     126             : 
     127             : #ifdef CPP_MPI
     128        6492 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_PRECISION, MPI_SUM, 0, mpi_comm, ierr)
     129             : #else
     130             :       targetArray(:,:) = sourceArray(:,:)
     131             : #endif
     132        6492 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     133        6492 :    END SUBROUTINE mpi_sum_reduce_real2
     134             : 
     135           0 :    SUBROUTINE mpi_sum_reduce_real3(sourceArray, targetArray, mpi_comm)
     136             :       IMPLICIT NONE
     137             :       REAL,    INTENT(IN)    :: sourceArray(:,:,:)
     138             :       REAL,    INTENT(INOUT) :: targetArray(:,:,:)
     139             :       INTEGER, INTENT(IN)    :: mpi_comm
     140             : 
     141             :       INTEGER :: ierr=0
     142             :       INTEGER :: length
     143             : 
     144           0 :       length = SIZE(sourceArray)
     145           0 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     146             : 
     147             : #ifdef CPP_MPI
     148           0 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_PRECISION, MPI_SUM, 0, mpi_comm, ierr)
     149             : #else
     150             :       targetArray(:,:,:) = sourceArray(:,:,:)
     151             : #endif
     152           0 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     153           0 :    END SUBROUTINE mpi_sum_reduce_real3
     154             : 
     155             :    ! COMPLEX SUBROUTINES:
     156             : 
     157         856 :    SUBROUTINE mpi_sum_reduce_complex1(sourceArray, targetArray, mpi_comm)
     158             :       IMPLICIT NONE
     159             :       COMPLEX, INTENT(IN)    :: sourceArray(:)
     160             :       COMPLEX, INTENT(INOUT) :: targetArray(:)
     161             :       INTEGER, INTENT(IN)    :: mpi_comm
     162             : 
     163             :       INTEGER :: ierr=0
     164             :       INTEGER :: length
     165             : 
     166         856 :       length = SIZE(sourceArray)
     167         856 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     168             : 
     169             : #ifdef CPP_MPI
     170         856 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, mpi_comm, ierr)
     171             : #else
     172             :       targetArray(:) = sourceArray(:)
     173             : #endif
     174         856 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     175         856 :    END SUBROUTINE mpi_sum_reduce_complex1
     176             : 
     177         696 :    SUBROUTINE mpi_sum_reduce_complex2(sourceArray, targetArray, mpi_comm)
     178             :       IMPLICIT NONE
     179             :       COMPLEX, INTENT(IN)    :: sourceArray(:,:)
     180             :       COMPLEX, INTENT(INOUT) :: targetArray(:,:)
     181             :       INTEGER, INTENT(IN)    :: mpi_comm
     182             : 
     183             :       INTEGER :: ierr=0
     184             :       INTEGER :: length
     185             : 
     186        2088 :       length = SIZE(sourceArray)
     187        2088 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     188             : 
     189             : #ifdef CPP_MPI
     190         696 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, mpi_comm, ierr)
     191             : #else
     192             :       targetArray(:,:) = sourceArray(:,:)
     193             : #endif
     194         696 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     195         696 :    END SUBROUTINE mpi_sum_reduce_complex2
     196             : 
     197         696 :    SUBROUTINE mpi_sum_reduce_complex3(sourceArray, targetArray, mpi_comm)
     198             :       IMPLICIT NONE
     199             :       COMPLEX, INTENT(IN)    :: sourceArray(:,:,:)
     200             :       COMPLEX, INTENT(INOUT) :: targetArray(:,:,:)
     201             :       INTEGER, INTENT(IN)    :: mpi_comm
     202             : 
     203             :       INTEGER :: ierr=0
     204             :       INTEGER :: length
     205             : 
     206        2784 :       length = SIZE(sourceArray)
     207        2784 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     208             : 
     209             : #ifdef CPP_MPI
     210         696 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, mpi_comm, ierr)
     211             : #else
     212             :       targetArray(:,:,:) = sourceArray(:,:,:)
     213             : #endif
     214         696 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     215         696 :    END SUBROUTINE mpi_sum_reduce_complex3
     216             : 
     217             :    ! LOGICAL SUBROUTINES :
     218             : 
     219           0 :    SUBROUTINE mpi_lor_reduce_bool1(sourceArray, targetArray, mpi_comm)
     220             :       IMPLICIT NONE
     221             :       LOGICAL, INTENT(IN)    :: sourceArray(:)
     222             :       LOGICAL, INTENT(INOUT) :: targetArray(:)
     223             :       INTEGER, INTENT(IN)    :: mpi_comm
     224             : 
     225             :       INTEGER :: ierr=0
     226             :       INTEGER :: length
     227             : 
     228           0 :       length = SIZE(sourceArray)
     229           0 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     230             : 
     231             : #ifdef CPP_MPI
     232           0 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_LOGICAL, MPI_LOR, 0, mpi_comm, ierr)
     233             : #else
     234             :       targetArray(:) = sourceArray(:)
     235             : #endif
     236           0 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     237           0 :    END SUBROUTINE mpi_lor_reduce_bool1
     238             : 
     239        2164 :    SUBROUTINE mpi_lor_reduce_bool2(sourceArray, targetArray, mpi_comm)
     240             :       IMPLICIT NONE
     241             :       LOGICAL, INTENT(IN)    :: sourceArray(:,:)
     242             :       LOGICAL, INTENT(INOUT) :: targetArray(:,:)
     243             :       INTEGER, INTENT(IN)    :: mpi_comm
     244             : 
     245             :       INTEGER :: ierr=0
     246             :       INTEGER :: length
     247             : 
     248        6492 :       length = SIZE(sourceArray)
     249        6492 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     250             : 
     251             : #ifdef CPP_MPI
     252        2164 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_LOGICAL, MPI_LOR, 0, mpi_comm, ierr)
     253             : #else
     254             :       targetArray(:,:) = sourceArray(:,:)
     255             : #endif
     256        2164 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     257        2164 :    END SUBROUTINE mpi_lor_reduce_bool2
     258             : 
     259           0 :    SUBROUTINE mpi_lor_reduce_bool3(sourceArray, targetArray, mpi_comm)
     260             :       IMPLICIT NONE
     261             :       LOGICAL, INTENT(IN)    :: sourceArray(:,:,:)
     262             :       LOGICAL, INTENT(INOUT) :: targetArray(:,:,:)
     263             :       INTEGER, INTENT(IN)    :: mpi_comm
     264             : 
     265             :       INTEGER :: ierr=0
     266             :       INTEGER :: length
     267             : 
     268           0 :       length = SIZE(sourceArray)
     269           0 :       IF(length.NE.SIZE(targetArray)) CALL judft_error("MPI_REDUCE failed: Array size mismatch.")
     270             : 
     271             : #ifdef CPP_MPI
     272           0 :       CALL MPI_REDUCE(sourceArray, targetArray, length, MPI_LOGICAL, MPI_LOR, 0, mpi_comm, ierr)
     273             : #else
     274             :       targetArray(:,:,:) = sourceArray(:,:,:)
     275             : #endif
     276           0 :       IF (ierr.NE.0) CALL judft_error("MPI_REDUCE failed")
     277           0 :    END SUBROUTINE mpi_lor_reduce_bool3
     278             : 
     279             : 
     280             : END MODULE m_mpi_reduce_tool

Generated by: LCOV version 1.14