(git:374b731)
Loading...
Searching...
No Matches
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
42CONTAINS
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
112END MODULE
often used utilities for tall-and-skinny matrices
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