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, &
22 USE dbcsr_api,
ONLY: dbcsr_csr_destroy,&
24 dbcsr_deallocate_matrix,&
28 #include "./base/base_uses.f90"
34 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'transport_env_types'
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
91 LOGICAL(C_BOOL) :: obc_equilibrium
92 LOGICAL(C_BOOL) :: extra_scf
95 TYPE transport_env_type
96 TYPE(C_FUNPTR) :: ext_c_method_ptr = c_null_funptr
97 TYPE(cp2k_transport_parameters) :: params
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
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
139 TYPE(transport_env_type),
POINTER :: transport_env
141 CHARACTER(len=*),
PARAMETER :: routinen =
'transport_env_release'
145 CALL timeset(routinen, handle)
147 cpassert(
ASSOCIATED(transport_env))
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)
160 transport_env%ext_c_method_ptr = c_null_funptr
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)
166 DEALLOCATE (transport_env)
168 CALL timestop(handle)
181 CHARACTER(LEN=*),
PARAMETER :: routinen =
'csr_interop_nullify'
185 CALL timeset(routinen, handle)
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
199 CALL timestop(handle)
220 nrows_total, ncols_total, nze_local, nze_total, nrows_local, data_type, &
221 first_row, rowptr_local, colind_local, nzerow_local, nzvals_local)
224 INTEGER,
INTENT(OUT),
OPTIONAL :: nrows_total, ncols_total, nze_local, &
225 nze_total, nrows_local, data_type, &
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
232 CHARACTER(LEN=*),
PARAMETER :: routinen =
'csr_interop_matrix_get_info'
236 CALL timeset(routinen, handle)
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
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])
251 CALL timestop(handle)
Defines the basic variable types.
integer, parameter, public dp
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...
Transport parameters read from a CP2K input file. This definition matches the respective type definit...