(git:be2ee82)
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-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! **************************************************************************************************
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
41CONTAINS
42
43! **************************************************************************************************
44!> \brief ...
45!> \param arr ...
46!> \author Patrick Seewald
47! **************************************************************************************************
48 SUBROUTINE swap_i8(arr)
49 INTEGER(KIND=int_8), DIMENSION(2), INTENT(INOUT) :: arr
50
51 INTEGER(KIND=int_8) :: tmp
52
53 tmp = arr(1)
54 arr(1) = arr(2)
55 arr(2) = tmp
56 END SUBROUTINE
57
58! **************************************************************************************************
59!> \brief ...
60!> \param arr ...
61!> \author Patrick Seewald
62! **************************************************************************************************
63 SUBROUTINE swap_i(arr)
64 INTEGER, DIMENSION(2), INTENT(INOUT) :: arr
65
66 INTEGER :: tmp
67
68 tmp = arr(1)
69 arr(1) = arr(2)
70 arr(2) = tmp
71 END SUBROUTINE
72
73! **************************************************************************************************
74!> \brief ...
75!> \param arr1 ...
76!> \param arr2 ...
77!> \return ...
78!> \author Patrick Seewald
79! **************************************************************************************************
80 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 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 END FUNCTION
91
92! **************************************************************************************************
93!> \brief ...
94!> \param arr1 ...
95!> \param arr2 ...
96!> \return ...
97!> \author Patrick Seewald
98! **************************************************************************************************
99 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 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 END FUNCTION
110
111END 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