(git:e7e05ae)
dbt_tas_util.F
Go to the documentation of this file.
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 ! **************************************************************************************************
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  SUBROUTINE swap_i8(arr)
50  INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT) :: arr
51 
52  INTEGER(KIND=int_8) :: tmp
53 
54  tmp = arr(1)
55  arr(1) = arr(2)
56  arr(2) = tmp
57  END SUBROUTINE
58 
59 ! **************************************************************************************************
60 !> \brief ...
61 !> \param arr ...
62 !> \author Patrick Seewald
63 ! **************************************************************************************************
64  SUBROUTINE swap_i(arr)
65  INTEGER, DIMENSION(2), INTENT(INOUT) :: arr
66 
67  INTEGER :: tmp
68 
69  tmp = arr(1)
70  arr(1) = arr(2)
71  arr(2) = tmp
72  END SUBROUTINE
73 
74 ! **************************************************************************************************
75 !> \brief ...
76 !> \param arr1 ...
77 !> \param arr2 ...
78 !> \return ...
79 !> \author Patrick Seewald
80 ! **************************************************************************************************
81  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  array_eq_i = .false.
89  IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = all(arr1 == arr2)
90 ! #endif
91  END FUNCTION
92 
93 ! **************************************************************************************************
94 !> \brief ...
95 !> \param arr1 ...
96 !> \param arr2 ...
97 !> \return ...
98 !> \author Patrick Seewald
99 ! **************************************************************************************************
100  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  array_eq_i8 = .false.
108  IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i8 = all(arr1 == arr2)
109 ! #endif
110  END FUNCTION
111 
112 END MODULE
often used utilities for tall-and-skinny matrices
Definition: dbt_tas_util.F:12
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public int_8
Definition: kinds.F:54
integer, parameter, public int_4
Definition: kinds.F:51
All kind of helpful little routines.
Definition: util.F:14