LCOV - code coverage report
Current view: top level - src/dbt/tas - dbt_tas_util.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:1f285aa) Lines: 13 18 72.2 %
Date: 2024-04-23 06:49:27 Functions: 3 4 75.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : !> \brief often used utilities for tall-and-skinny matrices
      10             : !> \author Patrick Seewald
      11             : ! **************************************************************************************************
      12             : MODULE dbt_tas_util
      13             :    USE kinds, ONLY: int_4, int_8
      14             :    USE util, ONLY: sort
      15             : 
      16             : #include "../../base/base_uses.f90"
      17             : 
      18             : ! #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)
      19             : !    USE libxsmm, ONLY: libxsmm_diff
      20             : ! #  define PURE_ARRAY_EQ
      21             : ! #else
      22             : #  define PURE_ARRAY_EQ PURE
      23             : ! #endif
      24             : 
      25             :    IMPLICIT NONE
      26             :    PRIVATE
      27             : 
      28             :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbt_tas_util'
      29             : 
      30             :    PUBLIC :: array_eq, swap
      31             : 
      32             :    INTERFACE swap
      33             :       MODULE PROCEDURE swap_i8
      34             :       MODULE PROCEDURE swap_i
      35             :    END INTERFACE
      36             : 
      37             :    INTERFACE array_eq
      38             :       MODULE PROCEDURE array_eq_i8
      39             :       MODULE PROCEDURE array_eq_i
      40             :    END INTERFACE
      41             : 
      42             : CONTAINS
      43             : 
      44             : ! **************************************************************************************************
      45             : !> \brief ...
      46             : !> \param arr ...
      47             : !> \author Patrick Seewald
      48             : ! **************************************************************************************************
      49      622764 :    SUBROUTINE swap_i8(arr)
      50             :       INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT)   :: arr
      51             : 
      52             :       INTEGER(KIND=int_8)                                :: tmp
      53             : 
      54      622764 :       tmp = arr(1)
      55      622764 :       arr(1) = arr(2)
      56      622764 :       arr(2) = tmp
      57      622764 :    END SUBROUTINE
      58             : 
      59             : ! **************************************************************************************************
      60             : !> \brief ...
      61             : !> \param arr ...
      62             : !> \author Patrick Seewald
      63             : ! **************************************************************************************************
      64           0 :    SUBROUTINE swap_i(arr)
      65             :       INTEGER, DIMENSION(2), INTENT(INOUT)               :: arr
      66             : 
      67             :       INTEGER                                            :: tmp
      68             : 
      69           0 :       tmp = arr(1)
      70           0 :       arr(1) = arr(2)
      71           0 :       arr(2) = tmp
      72           0 :    END SUBROUTINE
      73             : 
      74             : ! **************************************************************************************************
      75             : !> \brief ...
      76             : !> \param arr1 ...
      77             : !> \param arr2 ...
      78             : !> \return ...
      79             : !> \author Patrick Seewald
      80             : ! **************************************************************************************************
      81      118541 :    PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2)
      82             :       INTEGER, DIMENSION(:), INTENT(IN)                  :: arr1, arr2
      83             :       LOGICAL                                            :: array_eq_i
      84             : 
      85             : ! #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)
      86             : !       array_eq_i = .NOT. libxsmm_diff(arr1, arr2)
      87             : ! #else
      88      118541 :       array_eq_i = .FALSE.
      89      474052 :       IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2)
      90             : ! #endif
      91      118541 :    END FUNCTION
      92             : 
      93             : ! **************************************************************************************************
      94             : !> \brief ...
      95             : !> \param arr1 ...
      96             : !> \param arr2 ...
      97             : !> \return ...
      98             : !> \author Patrick Seewald
      99             : ! **************************************************************************************************
     100      118485 :    PURE_ARRAY_EQ FUNCTION array_eq_i8(arr1, arr2)
     101             :       INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN)      :: arr1, arr2
     102             :       LOGICAL                                            :: array_eq_i8
     103             : 
     104             : ! #if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR)
     105             : !       array_eq_i8 = .NOT. libxsmm_diff(arr1, arr2)
     106             : ! #else
     107      118485 :       array_eq_i8 = .FALSE.
     108    20758453 :       IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i8 = ALL(arr1 == arr2)
     109             : ! #endif
     110      118485 :    END FUNCTION
     111             : 
     112             : END MODULE

Generated by: LCOV version 1.15