(git:374b731)
Loading...
Searching...
No Matches
transport_env_types.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 CP2K transport environment and related C-interoperable types
10!> \par History
11!> 05.2013 created C-interoperable matrices [Hossein Bani-Hashemian]
12!> 07.2013 created transport_env [Hossein Bani-Hashemian]
13!> 11.2014 revised into CSR matrices [Hossein Bani-Hashemian]
14!> 12.2014 merged csr_interop and transport [Hossein Bani-Hashemian]
15!> \author Mohammad Hossein Bani-Hashemian
16! **************************************************************************************************
18
19 USE iso_c_binding, ONLY: &
20 c_associated, c_bool, c_double, c_funptr, c_f_pointer, c_int, c_null_funptr, c_null_ptr, &
21 c_ptr
22 USE dbcsr_api, ONLY: dbcsr_csr_destroy,&
23 dbcsr_csr_type,&
24 dbcsr_deallocate_matrix,&
25 dbcsr_release,&
26 dbcsr_type
27 USE kinds, ONLY: dp
28#include "./base/base_uses.f90"
29
30 IMPLICIT NONE
31
32 PRIVATE
33
34 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'transport_env_types'
35
37 PUBLIC :: cp2k_csr_interop_type
38
39! DO NOT change the ORDERING or the NAMES in the following data type
40 TYPE, BIND(C) :: cp2k_transport_parameters
41 INTEGER(C_INT) :: n_occ
42 INTEGER(C_INT) :: n_atoms
43 REAL(c_double) :: energy_diff
44 REAL(c_double) :: evoltfactor
45 REAL(c_double) :: e_charge
46 REAL(c_double) :: boltzmann
47 REAL(c_double) :: h_bar
48 INTEGER(C_INT) :: iscf
49 INTEGER(C_INT) :: method
50 INTEGER(C_INT) :: qt_formalism
51 INTEGER(C_INT) :: injection_method
52 INTEGER(C_INT) :: rlaxis_integration_method
53 INTEGER(C_INT) :: linear_solver
54 INTEGER(C_INT) :: matrixinv_method
55 INTEGER(C_INT) :: transport_neutral
56 INTEGER(C_INT) :: num_pole
57 INTEGER(C_INT) :: ordering
58 INTEGER(C_INT) :: row_ordering
59 INTEGER(C_INT) :: verbosity
60 INTEGER(C_INT) :: pexsi_np_symb_fact
61 INTEGER(C_INT) :: n_kpoint
62 INTEGER(C_INT) :: num_interval
63 INTEGER(C_INT) :: num_contacts
64 INTEGER(C_INT) :: stride_contacts
65 INTEGER(C_INT) :: tasks_per_energy_point
66 INTEGER(C_INT) :: tasks_per_pole
67 INTEGER(C_INT) :: gpus_per_point
68 INTEGER(C_INT) :: n_points_beyn
69 INTEGER(C_INT) :: ncrc_beyn
70 INTEGER(C_INT) :: tasks_per_integration_point
71 INTEGER(C_INT) :: n_points_inv
72 INTEGER(C_INT) :: cutout(2)
73 REAL(c_double) :: colzero_threshold
74 REAL(c_double) :: eps_limit
75 REAL(c_double) :: eps_limit_cc
76 REAL(c_double) :: eps_decay
77 REAL(c_double) :: eps_singularity_curvatures
78 REAL(c_double) :: eps_mu
79 REAL(c_double) :: eps_eigval_degen
80 REAL(c_double) :: eps_fermi
81 REAL(c_double) :: energy_interval
82 REAL(c_double) :: min_interval
83 REAL(c_double) :: temperature
84 REAL(c_double) :: dens_mixing
85 REAL(c_double) :: n_rand_beyn
86 REAL(c_double) :: n_rand_cc_beyn
87 REAL(c_double) :: svd_cutoff
88 TYPE(c_ptr) :: contacts_data
89 TYPE(c_ptr) :: nsgf
90 TYPE(c_ptr) :: zeff
91 LOGICAL(C_BOOL) :: obc_equilibrium
92 LOGICAL(C_BOOL) :: extra_scf
94
96 TYPE(c_funptr) :: ext_c_method_ptr = c_null_funptr
98 TYPE(dbcsr_type) :: template_matrix_sym
99 TYPE(dbcsr_type) :: template_matrix_nosym
100 TYPE(dbcsr_type) :: csr_sparsity
101 TYPE(dbcsr_type), POINTER :: dm_imag => null()
102 TYPE(dbcsr_csr_type) :: s_matrix
103 TYPE(dbcsr_csr_type) :: ks_matrix
104 TYPE(dbcsr_csr_type) :: p_matrix
105 TYPE(dbcsr_csr_type) :: imagp_matrix
106 LOGICAL :: csr_screening
107 INTEGER, DIMENSION(:), POINTER :: contacts_data => null()
108 INTEGER, DIMENSION(:), POINTER :: nsgf => null()
109 REAL(dp), DIMENSION(:), POINTER :: zeff => null()
110 END TYPE transport_env_type
111
112! DO NOT change the ORDERING or the NAMES in the following data type
113 TYPE, BIND(C) :: cp2k_csr_interop_type
114 INTEGER(C_INT) :: nrows_total
115 INTEGER(C_INT) :: ncols_total
116 INTEGER(C_INT) :: nze_total
117 INTEGER(C_INT) :: nze_local
118 INTEGER(C_INT) :: nrows_local
119 INTEGER(C_INT) :: data_type
120 INTEGER(C_INT) :: first_row
121 TYPE(c_ptr) :: rowptr_local
122 TYPE(c_ptr) :: colind_local
123 TYPE(c_ptr) :: nzerow_local
124 TYPE(c_ptr) :: nzvals_local
125 END TYPE cp2k_csr_interop_type
126
127 PUBLIC :: csr_interop_nullify, &
129 PUBLIC :: transport_env_release
130
131CONTAINS
132
133! **************************************************************************************************
134!> \brief releases the transport_env
135!> \param[inout] transport_env the transport_env to be released
136!> \author Mohammad Hossein Bani-Hashemian
137! **************************************************************************************************
138 SUBROUTINE transport_env_release(transport_env)
139 TYPE(transport_env_type), POINTER :: transport_env
140
141 CHARACTER(len=*), PARAMETER :: routinen = 'transport_env_release'
142
143 INTEGER :: handle
144
145 CALL timeset(routinen, handle)
146
147 cpassert(ASSOCIATED(transport_env))
148
149 IF (c_associated(transport_env%ext_c_method_ptr)) THEN
150 CALL dbcsr_csr_destroy(transport_env%s_matrix)
151 CALL dbcsr_csr_destroy(transport_env%ks_matrix)
152 CALL dbcsr_csr_destroy(transport_env%p_matrix)
153 CALL dbcsr_csr_destroy(transport_env%imagp_matrix)
154 CALL dbcsr_release(transport_env%template_matrix_sym)
155 CALL dbcsr_release(transport_env%template_matrix_nosym)
156 CALL dbcsr_release(transport_env%csr_sparsity)
157 CALL dbcsr_deallocate_matrix(transport_env%dm_imag)
158 END IF
159
160 transport_env%ext_c_method_ptr = c_null_funptr
161
162 IF (ASSOCIATED(transport_env%contacts_data)) DEALLOCATE (transport_env%contacts_data)
163 IF (ASSOCIATED(transport_env%nsgf)) DEALLOCATE (transport_env%nsgf)
164 IF (ASSOCIATED(transport_env%zeff)) DEALLOCATE (transport_env%zeff)
165
166 DEALLOCATE (transport_env)
167
168 CALL timestop(handle)
169
170 END SUBROUTINE transport_env_release
171
172! **************************************************************************************************
173!> \brief nullifies (and zeroizes) a C-interoperable CSR matrix
174!> \param[inout] csr_interop_mat the matrix to be nullified
175!> \author Mohammad Hossein Bani-Hashemian
176! **************************************************************************************************
177 SUBROUTINE csr_interop_nullify(csr_interop_mat)
178
179 TYPE(cp2k_csr_interop_type), INTENT(INOUT) :: csr_interop_mat
180
181 CHARACTER(LEN=*), PARAMETER :: routinen = 'csr_interop_nullify'
182
183 INTEGER :: handle
184
185 CALL timeset(routinen, handle)
186
187 csr_interop_mat%nrows_total = 0
188 csr_interop_mat%ncols_total = 0
189 csr_interop_mat%nze_total = 0
190 csr_interop_mat%nze_local = 0
191 csr_interop_mat%nrows_local = 0
192 csr_interop_mat%data_type = 0
193 csr_interop_mat%first_row = 0
194 csr_interop_mat%rowptr_local = c_null_ptr
195 csr_interop_mat%colind_local = c_null_ptr
196 csr_interop_mat%nzerow_local = c_null_ptr
197 csr_interop_mat%nzvals_local = c_null_ptr
198
199 CALL timestop(handle)
200
201 END SUBROUTINE csr_interop_nullify
202
203! **************************************************************************************************
204!> \brief gets the fields of a C-interoperable CSR matrix
205!> \param[in] csr_interop_mat C-interoperable CSR matrix
206!> \param[out] nrows_total total number of rows
207!> \param[out] ncols_total total number of columns
208!> \param[out] nze_local number of local nonzero elements
209!> \param[out] nze_total total number of nonzero elements
210!> \param[out] nrows_local number of local rows
211!> \param[out] data_type data type
212!> \param[out] first_row index of the first row (C indexing)
213!> \param[out] rowptr_local row pointer (local - Fortran indexing)
214!> \param[out] colind_local column index (local - Fortran indexing)
215!> \param[out] nzerow_local number of nunzeros per row (index-i, local - Fortran indexing)
216!> \param[out] nzvals_local nonzero elements (local)
217!> \author Mohammad Hossein Bani-Hashemian
218! **************************************************************************************************
219 SUBROUTINE csr_interop_matrix_get_info(csr_interop_mat, &
220 nrows_total, ncols_total, nze_local, nze_total, nrows_local, data_type, &
221 first_row, rowptr_local, colind_local, nzerow_local, nzvals_local)
222
223 TYPE(cp2k_csr_interop_type), INTENT(IN) :: csr_interop_mat
224 INTEGER, INTENT(OUT), OPTIONAL :: nrows_total, ncols_total, nze_local, &
225 nze_total, nrows_local, data_type, &
226 first_row
227 INTEGER, DIMENSION(:), INTENT(OUT), OPTIONAL, &
228 POINTER :: rowptr_local, colind_local, nzerow_local
229 REAL(dp), DIMENSION(:), INTENT(OUT), OPTIONAL, &
230 POINTER :: nzvals_local
231
232 CHARACTER(LEN=*), PARAMETER :: routinen = 'csr_interop_matrix_get_info'
233
234 INTEGER :: handle
235
236 CALL timeset(routinen, handle)
237
238 IF (PRESENT(nrows_total)) nrows_total = csr_interop_mat%nrows_total
239 IF (PRESENT(ncols_total)) ncols_total = csr_interop_mat%ncols_total
240 IF (PRESENT(nze_local)) nze_local = csr_interop_mat%nze_local
241 IF (PRESENT(nze_total)) nze_total = csr_interop_mat%nze_total
242 IF (PRESENT(nrows_local)) nrows_local = csr_interop_mat%nrows_local
243 IF (PRESENT(data_type)) data_type = csr_interop_mat%data_type
244 IF (PRESENT(first_row)) first_row = csr_interop_mat%first_row
245
246 IF (PRESENT(rowptr_local)) CALL c_f_pointer(csr_interop_mat%rowptr_local, rowptr_local, [nrows_local + 1])
247 IF (PRESENT(colind_local)) CALL c_f_pointer(csr_interop_mat%colind_local, colind_local, [nze_local])
248 IF (PRESENT(nzerow_local)) CALL c_f_pointer(csr_interop_mat%nzerow_local, nzerow_local, [nrows_local])
249 IF (PRESENT(nzvals_local)) CALL c_f_pointer(csr_interop_mat%nzvals_local, nzvals_local, [nze_local])
250
251 CALL timestop(handle)
252
253 END SUBROUTINE csr_interop_matrix_get_info
254
255END MODULE transport_env_types
256
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
CP2K transport environment and related C-interoperable types.
subroutine, public csr_interop_nullify(csr_interop_mat)
nullifies (and zeroizes) a C-interoperable CSR matrix
subroutine, public transport_env_release(transport_env)
releases the transport_env
subroutine, public csr_interop_matrix_get_info(csr_interop_mat, nrows_total, ncols_total, nze_local, nze_total, nrows_local, data_type, first_row, rowptr_local, colind_local, nzerow_local, nzvals_local)
gets the fields of a C-interoperable CSR matrix
CP2K's C-interoperable CSR matrix This definition matches the respective type definition in the trans...
Definition libcp2k.h:268
Transport parameters read from a CP2K input file. This definition matches the respective type definit...
Definition libcp2k.h:208