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 : MODULE qs_fb_trial_fns_types
9 :
10 : #include "./base/base_uses.f90"
11 : IMPLICIT NONE
12 :
13 : PRIVATE
14 :
15 : ! public types
16 : PUBLIC :: fb_trial_fns_obj
17 :
18 : ! public methods
19 : !API
20 : PUBLIC :: fb_trial_fns_release, &
21 : fb_trial_fns_nullify, &
22 : fb_trial_fns_associate, &
23 : fb_trial_fns_has_data, &
24 : fb_trial_fns_create, &
25 : fb_trial_fns_get, &
26 : fb_trial_fns_set
27 :
28 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_fb_trial_fns_types'
29 :
30 : ! **************************************************************************************************
31 : !> \brief data containing information on trial functions used by filter
32 : !> matrix diagonalisation method
33 : !> \param nfunctions : nfunctions(ikind) = number of trial functions for
34 : !> atomic kind ikind
35 : !> \param functions : functions(itrial,ikind) = the index of the
36 : !> GTO atomic orbital corresponding to itrial-th trial
37 : !> function for kind ikind
38 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
39 : ! **************************************************************************************************
40 : TYPE fb_trial_fns_data
41 : INTEGER, DIMENSION(:), POINTER :: nfunctions => NULL()
42 : INTEGER, DIMENSION(:, :), POINTER :: functions => NULL()
43 : END TYPE fb_trial_fns_data
44 :
45 : ! **************************************************************************************************
46 : !> \brief the object container which allows for the creation of an array
47 : !> of pointers to fb_trial_fns objects
48 : !> \param obj : pointer to the fb_trial_fns object
49 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
50 : ! **************************************************************************************************
51 : TYPE fb_trial_fns_obj
52 : TYPE(fb_trial_fns_data), POINTER, PRIVATE :: obj => NULL()
53 : END TYPE fb_trial_fns_obj
54 :
55 : CONTAINS
56 :
57 : ! **************************************************************************************************
58 : !> \brief releases given object
59 : !> \brief ...
60 : !> \param trial_fns : the fb_trial_fns object in question
61 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
62 : ! **************************************************************************************************
63 90 : SUBROUTINE fb_trial_fns_release(trial_fns)
64 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: trial_fns
65 :
66 90 : IF (ASSOCIATED(trial_fns%obj)) THEN
67 80 : IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
68 80 : DEALLOCATE (trial_fns%obj%nfunctions)
69 : END IF
70 80 : IF (ASSOCIATED(trial_fns%obj%functions)) THEN
71 80 : DEALLOCATE (trial_fns%obj%functions)
72 : END IF
73 80 : DEALLOCATE (trial_fns%obj)
74 : ELSE
75 10 : NULLIFY (trial_fns%obj)
76 : END IF
77 90 : END SUBROUTINE fb_trial_fns_release
78 :
79 : ! **************************************************************************************************
80 : !> \brief nullifies the content of given object
81 : !> \param trial_fns : the fb_trial_fns object in question
82 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
83 : ! **************************************************************************************************
84 170 : SUBROUTINE fb_trial_fns_nullify(trial_fns)
85 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: trial_fns
86 :
87 170 : NULLIFY (trial_fns%obj)
88 170 : END SUBROUTINE fb_trial_fns_nullify
89 :
90 : ! **************************************************************************************************
91 : !> \brief associates the content of an object to that of another object
92 : !> of the same type
93 : !> \param a : the output object
94 : !> \param b : the input object
95 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
96 : ! **************************************************************************************************
97 80 : SUBROUTINE fb_trial_fns_associate(a, b)
98 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: a
99 : TYPE(fb_trial_fns_obj), INTENT(IN) :: b
100 :
101 80 : CALL fb_trial_fns_release(a)
102 80 : a%obj => b%obj
103 80 : END SUBROUTINE fb_trial_fns_associate
104 :
105 : ! **************************************************************************************************
106 : !> \brief check if the object has data associated to it
107 : !> \param trial_fns : the fb_trial_fns object in question
108 : !> \return : true if trial_fns%obj is associated, false otherwise
109 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
110 : ! **************************************************************************************************
111 0 : FUNCTION fb_trial_fns_has_data(trial_fns) RESULT(res)
112 : TYPE(fb_trial_fns_obj), INTENT(IN) :: trial_fns
113 : LOGICAL :: res
114 :
115 0 : res = ASSOCIATED(trial_fns%obj)
116 0 : END FUNCTION fb_trial_fns_has_data
117 :
118 : ! **************************************************************************************************
119 : !> \brief creates an fb_trial_fns object and initialises it
120 : !> \param trial_fns : the fb_trial_fns object in question
121 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
122 : ! **************************************************************************************************
123 80 : SUBROUTINE fb_trial_fns_create(trial_fns)
124 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: trial_fns
125 :
126 80 : CPASSERT(.NOT. ASSOCIATED(trial_fns%obj))
127 80 : ALLOCATE (trial_fns%obj)
128 : NULLIFY (trial_fns%obj%nfunctions)
129 : NULLIFY (trial_fns%obj%functions)
130 80 : END SUBROUTINE fb_trial_fns_create
131 :
132 : ! **************************************************************************************************
133 : !> \brief initialises an fb_trial_fns object
134 : !> \param trial_fns : the fb_trial_fns object in question
135 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
136 : ! **************************************************************************************************
137 0 : SUBROUTINE fb_trial_fns_init(trial_fns)
138 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: trial_fns
139 :
140 0 : CPASSERT(ASSOCIATED(trial_fns%obj))
141 : ! if halo_atoms are associated, then deallocate and de-associate
142 0 : IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
143 0 : DEALLOCATE (trial_fns%obj%nfunctions)
144 : END IF
145 0 : IF (ASSOCIATED(trial_fns%obj%functions)) THEN
146 0 : DEALLOCATE (trial_fns%obj%functions)
147 : END IF
148 0 : END SUBROUTINE fb_trial_fns_init
149 :
150 : ! **************************************************************************************************
151 : !> \brief get values of the attributes of a fb_trial_fns object
152 : !> \param trial_fns : the fb_trial_fns object in question
153 : !> \param nfunctions : outputs pointer to trial_fns%obj%nfunctions
154 : !> \param functions : outputs pointer to trial_fns%obj%functions
155 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
156 : ! **************************************************************************************************
157 400 : SUBROUTINE fb_trial_fns_get(trial_fns, &
158 : nfunctions, &
159 : functions)
160 : TYPE(fb_trial_fns_obj), INTENT(IN) :: trial_fns
161 : INTEGER, DIMENSION(:), OPTIONAL, POINTER :: nfunctions
162 : INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: functions
163 :
164 400 : CPASSERT(ASSOCIATED(trial_fns%obj))
165 400 : IF (PRESENT(nfunctions)) nfunctions => trial_fns%obj%nfunctions
166 400 : IF (PRESENT(functions)) functions => trial_fns%obj%functions
167 400 : END SUBROUTINE fb_trial_fns_get
168 :
169 : ! **************************************************************************************************
170 : !> \brief sets the attributes of a fb_trial_fns object
171 : !> \param trial_fns : the fb_trial_fns object in question
172 : !> \param nfunctions : associates trial_fns%obj%nfunctions to this pointer
173 : !> \param functions : associates trial_fns%obj%nfunctions to this pointer
174 : !> \author Lianheng Tong (LT) lianheng.tong@kcl.ac.uk
175 : ! **************************************************************************************************
176 80 : SUBROUTINE fb_trial_fns_set(trial_fns, &
177 : nfunctions, &
178 : functions)
179 : TYPE(fb_trial_fns_obj), INTENT(INOUT) :: trial_fns
180 : INTEGER, DIMENSION(:), OPTIONAL, POINTER :: nfunctions
181 : INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: functions
182 :
183 80 : CPASSERT(ASSOCIATED(trial_fns%obj))
184 80 : IF (PRESENT(nfunctions)) THEN
185 80 : IF (ASSOCIATED(trial_fns%obj%nfunctions)) THEN
186 0 : DEALLOCATE (trial_fns%obj%nfunctions)
187 : END IF
188 80 : trial_fns%obj%nfunctions => nfunctions
189 : END IF
190 80 : IF (PRESENT(functions)) THEN
191 80 : IF (ASSOCIATED(trial_fns%obj%functions)) THEN
192 0 : DEALLOCATE (trial_fns%obj%functions)
193 : END IF
194 80 : trial_fns%obj%functions => functions
195 : END IF
196 80 : END SUBROUTINE fb_trial_fns_set
197 :
198 0 : END MODULE qs_fb_trial_fns_types
|