LCOV - code coverage report
Current view: top level - src/dbt/tas - dbt_tas_util.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:85b8a9b) Lines: 68.8 % 16 11
Test Date: 2026-06-14 06:48:14 Functions: 75.0 % 4 3

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 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              : #if defined(__LIBXS)
      18              :    USE libxs, ONLY: libxs_diff
      19              : #  define PURE_ARRAY_EQ
      20              : #else
      21              : #  define PURE_ARRAY_EQ PURE
      22              : #endif
      23              : 
      24              :    IMPLICIT NONE
      25              :    PRIVATE
      26              : 
      27              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbt_tas_util'
      28              : 
      29              :    PUBLIC :: array_eq, swap
      30              : 
      31              :    INTERFACE swap
      32              :       MODULE PROCEDURE swap_i8
      33              :       MODULE PROCEDURE swap_i
      34              :    END INTERFACE
      35              : 
      36              :    INTERFACE array_eq
      37              :       MODULE PROCEDURE array_eq_i8
      38              :       MODULE PROCEDURE array_eq_i
      39              :    END INTERFACE
      40              : 
      41              : CONTAINS
      42              : 
      43              : ! **************************************************************************************************
      44              : !> \brief ...
      45              : !> \param arr ...
      46              : !> \author Patrick Seewald
      47              : ! **************************************************************************************************
      48      1209919 :    SUBROUTINE swap_i8(arr)
      49              :       INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT)   :: arr
      50              : 
      51              :       INTEGER(KIND=int_8)                                :: tmp
      52              : 
      53      1209919 :       tmp = arr(1)
      54      1209919 :       arr(1) = arr(2)
      55      1209919 :       arr(2) = tmp
      56      1209919 :    END SUBROUTINE
      57              : 
      58              : ! **************************************************************************************************
      59              : !> \brief ...
      60              : !> \param arr ...
      61              : !> \author Patrick Seewald
      62              : ! **************************************************************************************************
      63            0 :    SUBROUTINE swap_i(arr)
      64              :       INTEGER, DIMENSION(2), INTENT(INOUT)               :: arr
      65              : 
      66              :       INTEGER                                            :: tmp
      67              : 
      68            0 :       tmp = arr(1)
      69            0 :       arr(1) = arr(2)
      70            0 :       arr(2) = tmp
      71            0 :    END SUBROUTINE
      72              : 
      73              : ! **************************************************************************************************
      74              : !> \brief ...
      75              : !> \param arr1 ...
      76              : !> \param arr2 ...
      77              : !> \return ...
      78              : !> \author Patrick Seewald
      79              : ! **************************************************************************************************
      80       223546 :    PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2)
      81              :       INTEGER, DIMENSION(:), INTENT(IN)                  :: arr1, arr2
      82              :       LOGICAL                                            :: array_eq_i
      83              : 
      84              : #if defined(__LIBXS)
      85       223546 :       array_eq_i = .NOT. libxs_diff(arr1, arr2)
      86              : #else
      87              :       array_eq_i = .FALSE.
      88              :       IF (SIZE(arr1) == SIZE(arr2)) array_eq_i = ALL(arr1 == arr2)
      89              : #endif
      90       223546 :    END FUNCTION
      91              : 
      92              : ! **************************************************************************************************
      93              : !> \brief ...
      94              : !> \param arr1 ...
      95              : !> \param arr2 ...
      96              : !> \return ...
      97              : !> \author Patrick Seewald
      98              : ! **************************************************************************************************
      99       223490 :    PURE_ARRAY_EQ FUNCTION array_eq_i8(arr1, arr2)
     100              :       INTEGER(KIND=int_8), DIMENSION(:), INTENT(IN)      :: arr1, arr2
     101              :       LOGICAL                                            :: array_eq_i8
     102              : 
     103              : #if defined(__LIBXS)
     104       223490 :       array_eq_i8 = .NOT. libxs_diff(arr1, arr2)
     105              : #else
     106              :       array_eq_i8 = .FALSE.
     107              :       IF (SIZE(arr1) == SIZE(arr2)) array_eq_i8 = ALL(arr1 == arr2)
     108              : #endif
     109       223490 :    END FUNCTION
     110              : 
     111              : END MODULE
        

Generated by: LCOV version 2.0-1