Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 : ! **************************************************************************************************
8 : MODULE qs_oce_types
9 :
10 : USE block_p_types, ONLY: block_p_type
11 : USE kinds, ONLY: dp
12 : USE sap_kind_types, ONLY: release_sap_int,&
13 : sap_int_type
14 : #include "./base/base_uses.f90"
15 :
16 : IMPLICIT NONE
17 :
18 : PRIVATE
19 :
20 : ! *** Global parameters (only in this module)
21 :
22 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_oce_types'
23 :
24 : ! *** Define a oce matrix type ***
25 :
26 : ! **************************************************************************************************
27 : TYPE qlist_type
28 : TYPE(block_p_type), DIMENSION(:), POINTER :: sac => NULL()
29 : REAL(KIND=dp), DIMENSION(:), POINTER :: r2 => NULL()
30 : REAL(KIND=dp), DIMENSION(:, :), POINTER :: r => NULL()
31 : INTEGER :: n = -1
32 : INTEGER, DIMENSION(:), POINTER :: index_list => NULL()
33 : INTEGER, DIMENSION(:), POINTER :: list => NULL()
34 : END TYPE qlist_type
35 :
36 : ! **************************************************************************************************
37 : TYPE oce_matrix_type
38 : TYPE(sap_int_type), DIMENSION(:), POINTER :: intac => NULL()
39 : END TYPE
40 :
41 : ! *** Public data types ***
42 :
43 : PUBLIC :: oce_matrix_type
44 :
45 : ! *** Public subroutines ***
46 :
47 : PUBLIC :: allocate_oce_set, &
48 : create_oce_set, &
49 : deallocate_oce_set
50 :
51 : CONTAINS
52 :
53 : ! **************************************************************************************************
54 : !> \brief Allocate and initialize the matrix set of oce coefficients.
55 : !> \param oce_set ...
56 : !> \param nkind ...
57 : !> \version 1.0
58 : ! **************************************************************************************************
59 2438 : SUBROUTINE allocate_oce_set(oce_set, nkind)
60 : TYPE(oce_matrix_type), POINTER :: oce_set
61 : INTEGER, INTENT(IN) :: nkind
62 :
63 : INTEGER :: i
64 :
65 18616 : ALLOCATE (oce_set%intac(nkind*nkind))
66 13740 : DO i = 1, nkind*nkind
67 11302 : NULLIFY (oce_set%intac(i)%alist)
68 11302 : NULLIFY (oce_set%intac(i)%asort)
69 13740 : NULLIFY (oce_set%intac(i)%aindex)
70 : END DO
71 :
72 2438 : END SUBROUTINE allocate_oce_set
73 :
74 : ! **************************************************************************************************
75 : !> \brief ...
76 : !> \param oce_set ...
77 : ! **************************************************************************************************
78 2438 : SUBROUTINE create_oce_set(oce_set)
79 :
80 : TYPE(oce_matrix_type), POINTER :: oce_set
81 :
82 2438 : IF (ASSOCIATED(oce_set)) CALL deallocate_oce_set(oce_set)
83 :
84 2438 : ALLOCATE (oce_set)
85 :
86 : NULLIFY (oce_set%intac)
87 :
88 2438 : END SUBROUTINE create_oce_set
89 :
90 : ! **************************************************************************************************
91 : !> \brief Deallocate the matrix set of oce coefficients
92 : !> \param oce_set ...
93 : !> \date
94 : !> \author
95 : !> \version 1.0
96 : ! **************************************************************************************************
97 2438 : SUBROUTINE deallocate_oce_set(oce_set)
98 : TYPE(oce_matrix_type), POINTER :: oce_set
99 :
100 2438 : IF (.NOT. ASSOCIATED(oce_set)) RETURN
101 :
102 2438 : IF (ASSOCIATED(oce_set%intac)) CALL release_sap_int(oce_set%intac)
103 :
104 2438 : DEALLOCATE (oce_set)
105 :
106 : END SUBROUTINE deallocate_oce_set
107 :
108 : ! **************************************************************************************************
109 :
110 0 : END MODULE qs_oce_types
|