Loading [MathJax]/extensions/tex2jax.js
 (git:b77b4be)
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
transport.F
Go to the documentation of this file.
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! **************************************************************************************************
9!> \brief routines for DFT+NEGF calculations (coupling with the quantum transport code OMEN)
10!> \par History
11!> 12.2012 created external_scf_method [Hossein Bani-Hashemian]
12!> 05.2013 created rotines to work with C-interoperable matrices [Hossein Bani-Hashemian]
13!> 07.2013 created transport_env routines [Hossein Bani-Hashemian]
14!> 11.2014 switch to CSR matrices [Hossein Bani-Hashemian]
15!> 12.2014 merged [Hossein Bani-Hashemian]
16!> 04.2016 added imaginary DM and current density cube [Hossein Bani-Hashemian]
17!> \author Mohammad Hossein Bani-Hashemian
18! **************************************************************************************************
20 USE iso_c_binding, ONLY: c_associated,&
21 c_bool,&
22 c_double,&
23 c_f_procpointer,&
24 c_int,&
25 c_loc,&
26 c_null_ptr,&
27 c_ptr
30 USE bibliography, ONLY: bruck2014,&
31 cite_reference
33 USE cp_dbcsr_api, ONLY: &
35 dbcsr_csr_create, dbcsr_csr_create_from_dbcsr, dbcsr_csr_dbcsr_blkrow_dist, &
36 dbcsr_csr_print_sparsity, dbcsr_csr_type, dbcsr_deallocate_matrix, dbcsr_desymmetrize, &
37 dbcsr_has_symmetry, dbcsr_set, dbcsr_type, dbcsr_type_no_symmetry
42 USE cp_output_handling, ONLY: cp_p_file,&
52 USE kinds, ONLY: dp
56 USE physcon, ONLY: boltzmann,&
57 e_charge,&
58 evolt,&
59 h_bar
60 USE pw_env_types, ONLY: pw_env_get,&
62 USE pw_methods, ONLY: pw_zero
64 USE pw_types, ONLY: pw_c1d_gs_type,&
69 USE qs_kind_types, ONLY: get_qs_kind,&
74 USE qs_rho_types, ONLY: qs_rho_get,&
83#include "./base/base_uses.f90"
84
85 IMPLICIT NONE
86
87 PRIVATE
88
89 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'transport'
90
92 PUBLIC :: qs_scf_post_transport
93
94!> interface between C/C++ and FORTRAN
95 INTERFACE c_func_interface
96! **************************************************************************************************
97!> \brief C routine that takes the S and H matrices as input and outputs a P matrix
98!> \param cp2k_transport_params transport parameters read form a CP2K input file
99!> \param s_mat C-interoperable overlap matrix
100!> \param ks_mat C-interoperable Kohn-Sham matrix
101!> \param p_mat C-interoperable density matrix
102!> \param imagp_mat C-interoperable imaginary density matrix
103!> \author Mohammad Hossein Bani-Hashemian
104! **************************************************************************************************
105 SUBROUTINE c_scf_routine(cp2k_transport_params, s_mat, ks_mat, p_mat, imagp_mat) BIND(C)
106 IMPORT :: c_int, c_ptr, cp2k_csr_interop_type, cp2k_transport_parameters
107 IMPLICIT NONE
108 TYPE(cp2k_transport_parameters), VALUE, INTENT(IN) :: cp2k_transport_params
109 TYPE(cp2k_csr_interop_type), VALUE, INTENT(IN) :: s_mat
110 TYPE(cp2k_csr_interop_type), VALUE, INTENT(IN) :: ks_mat
111 TYPE(cp2k_csr_interop_type), INTENT(INOUT) :: p_mat
112 TYPE(cp2k_csr_interop_type), INTENT(INOUT) :: imagp_mat
113 END SUBROUTINE c_scf_routine
114 END INTERFACE c_func_interface
115
116CONTAINS
117
118! **************************************************************************************************
119!> \brief creates the transport environment
120!> \param[inout] qs_env the qs_env containing the transport_env
121!> \author Mohammad Hossein Bani-Hashemian
122! **************************************************************************************************
123 SUBROUTINE transport_env_create(qs_env)
124 TYPE(qs_environment_type), POINTER :: qs_env
125
126 CHARACTER(LEN=*), PARAMETER :: routinen = 'transport_env_create'
127
128 INTEGER :: handle
129 TYPE(dft_control_type), POINTER :: dft_control
130 TYPE(section_vals_type), POINTER :: input
131 TYPE(transport_env_type), POINTER :: transport_env
132
133 CALL timeset(routinen, handle)
134
135 CALL get_qs_env(qs_env, &
136 transport_env=transport_env, &
137 dft_control=dft_control, &
138 input=input)
139
140 cpassert(.NOT. ASSOCIATED(transport_env))
141
142 ALLOCATE (transport_env)
143
144 CALL transport_init_read_input(input, transport_env)
145 CALL transport_set_contact_params(qs_env, transport_env)
146
147 CALL set_qs_env(qs_env, transport_env=transport_env)
148
149 CALL timestop(handle)
150
151 END SUBROUTINE transport_env_create
152
153! **************************************************************************************************
154!> \brief intitializes all fields of transport_env using the parameters read from
155!> the corresponding input section
156!> \param[inout] input the input file
157!> \param[inout] transport_env the transport_env to be initialized
158!> \author Mohammad Hossein Bani-Hashemian
159! **************************************************************************************************
160 SUBROUTINE transport_init_read_input(input, transport_env)
161 TYPE(section_vals_type), POINTER :: input
162 TYPE(transport_env_type), INTENT(INOUT) :: transport_env
163
164 CHARACTER(len=*), PARAMETER :: routinen = 'transport_init_read_input'
165
166 INTEGER :: contact_bandwidth, contact_injsign, &
167 contact_natoms, contact_start, handle, &
168 i, n_contacts, stride_contacts
169 INTEGER, DIMENSION(:), POINTER :: i_vals
170 LOGICAL :: contact_explicit, injecting_contact, &
171 obc_equilibrium, one_circle
172 TYPE(section_vals_type), POINTER :: beyn_section, contact_section, &
173 pexsi_section, transport_section
174
175 CALL timeset(routinen, handle)
176
177 transport_section => section_vals_get_subs_vals(input, "DFT%TRANSPORT")
178 contact_section => section_vals_get_subs_vals(transport_section, "CONTACT")
179 beyn_section => section_vals_get_subs_vals(transport_section, "BEYN")
180 pexsi_section => section_vals_get_subs_vals(transport_section, "PEXSI")
181 CALL section_vals_get(contact_section, explicit=contact_explicit, n_repetition=n_contacts)
182
183 NULLIFY (i_vals)
184! read from input
185 CALL section_vals_val_get(transport_section, "TRANSPORT_METHOD", i_val=transport_env%params%method)
186 CALL section_vals_val_get(transport_section, "INJECTION_METHOD", i_val=transport_env%params%injection_method)
187 CALL section_vals_val_get(transport_section, "REAL_AXIS_INTEGRATION_METHOD", &
188 i_val=transport_env%params%rlaxis_integration_method)
189 CALL section_vals_val_get(transport_section, "QT_FORMALISM", i_val=transport_env%params%qt_formalism)
190 CALL section_vals_val_get(transport_section, "LINEAR_SOLVER", i_val=transport_env%params%linear_solver)
191 CALL section_vals_val_get(transport_section, "MATRIX_INVERSION_METHOD", &
192 i_val=transport_env%params%matrixinv_method)
193 CALL section_vals_val_get(transport_section, "CONTACT_FILLING", i_val=transport_env%params%transport_neutral)
194 CALL section_vals_val_get(transport_section, "N_KPOINTS", i_val=transport_env%params%n_kpoint)
195 CALL section_vals_val_get(transport_section, "NUM_INTERVAL", i_val=transport_env%params%num_interval)
196 CALL section_vals_val_get(transport_section, "TASKS_PER_ENERGY_POINT", &
197 i_val=transport_env%params%tasks_per_energy_point)
198 CALL section_vals_val_get(transport_section, "TASKS_PER_POLE", i_val=transport_env%params%tasks_per_pole)
199 CALL section_vals_val_get(transport_section, "NUM_POLE", i_val=transport_env%params%num_pole)
200 CALL section_vals_val_get(transport_section, "GPUS_PER_POINT", i_val=transport_env%params%gpus_per_point)
201 CALL section_vals_val_get(transport_section, "N_POINTS_INV", i_val=transport_env%params%n_points_inv)
202 CALL section_vals_val_get(transport_section, "COLZERO_THRESHOLD", r_val=transport_env%params%colzero_threshold)
203 CALL section_vals_val_get(transport_section, "EPS_LIMIT", r_val=transport_env%params%eps_limit)
204 CALL section_vals_val_get(transport_section, "EPS_LIMIT_CC", r_val=transport_env%params%eps_limit_cc)
205 CALL section_vals_val_get(transport_section, "EPS_DECAY", r_val=transport_env%params%eps_decay)
206 CALL section_vals_val_get(transport_section, "EPS_SINGULARITY_CURVATURES", &
207 r_val=transport_env%params%eps_singularity_curvatures)
208 CALL section_vals_val_get(transport_section, "EPS_MU", r_val=transport_env%params%eps_mu)
209 CALL section_vals_val_get(transport_section, "EPS_EIGVAL_DEGEN", r_val=transport_env%params%eps_eigval_degen)
210 CALL section_vals_val_get(transport_section, "EPS_FERMI", r_val=transport_env%params%eps_fermi)
211 CALL section_vals_val_get(transport_section, "ENERGY_INTERVAL", r_val=transport_env%params%energy_interval)
212 CALL section_vals_val_get(transport_section, "MIN_INTERVAL", r_val=transport_env%params%min_interval)
213 CALL section_vals_val_get(transport_section, "TEMPERATURE", r_val=transport_env%params%temperature)
214 CALL section_vals_val_get(transport_section, "DENSITY_MIXING", r_val=transport_env%params%dens_mixing)
215 CALL section_vals_val_get(transport_section, "CSR_SCREENING", l_val=transport_env%csr_screening)
216
217 ! logical*1 to logical*4 , l_val is logical*1 and c_bool is equivalent to logical*4
218 CALL section_vals_val_get(transport_section, "OBC_EQUILIBRIUM", l_val=obc_equilibrium)
219 IF (obc_equilibrium) THEN
220 transport_env%params%obc_equilibrium = .true.
221 ELSE
222 transport_env%params%obc_equilibrium = .false.
223 END IF
224
225 CALL section_vals_val_get(transport_section, "CUTOUT", i_vals=i_vals)
226 transport_env%params%cutout = i_vals
227
228 CALL section_vals_val_get(beyn_section, "TASKS_PER_INTEGRATION_POINT", &
229 i_val=transport_env%params%tasks_per_integration_point)
230 CALL section_vals_val_get(beyn_section, "N_POINTS_BEYN", i_val=transport_env%params%n_points_beyn)
231 CALL section_vals_val_get(beyn_section, "N_RAND", r_val=transport_env%params%n_rand_beyn)
232 CALL section_vals_val_get(beyn_section, "N_RAND_CC", r_val=transport_env%params%n_rand_cc_beyn)
233 CALL section_vals_val_get(beyn_section, "SVD_CUTOFF", r_val=transport_env%params%svd_cutoff)
234 CALL section_vals_val_get(beyn_section, "ONE_CIRCLE", l_val=one_circle)
235 IF (one_circle) THEN
236 transport_env%params%ncrc_beyn = 1
237 ELSE
238 transport_env%params%ncrc_beyn = 2
239 END IF
240
241 CALL section_vals_val_get(pexsi_section, "ORDERING", i_val=transport_env%params%ordering)
242 CALL section_vals_val_get(pexsi_section, "ROW_ORDERING", i_val=transport_env%params%row_ordering)
243 CALL section_vals_val_get(pexsi_section, "VERBOSITY", i_val=transport_env%params%verbosity)
244 CALL section_vals_val_get(pexsi_section, "NP_SYMB_FACT", i_val=transport_env%params%pexsi_np_symb_fact)
245
246 IF (contact_explicit) THEN
247 transport_env%params%num_contacts = n_contacts
248 stride_contacts = 5
249 transport_env%params%stride_contacts = stride_contacts
250 ALLOCATE (transport_env%contacts_data(stride_contacts*n_contacts))
251
252 DO i = 1, n_contacts
253 CALL section_vals_val_get(contact_section, "BANDWIDTH", i_rep_section=i, i_val=contact_bandwidth)
254 CALL section_vals_val_get(contact_section, "START", i_rep_section=i, i_val=contact_start)
255 CALL section_vals_val_get(contact_section, "N_ATOMS", i_rep_section=i, i_val=contact_natoms)
256 CALL section_vals_val_get(contact_section, "INJECTION_SIGN", i_rep_section=i, i_val=contact_injsign)
257 CALL section_vals_val_get(contact_section, "INJECTING_CONTACT", i_rep_section=i, l_val=injecting_contact)
258
259 IF (contact_natoms .LE. 0) cpabort("Number of atoms in contact region needs to be defined.")
260
261 transport_env%contacts_data((i - 1)*stride_contacts + 1) = contact_bandwidth
262 transport_env%contacts_data((i - 1)*stride_contacts + 2) = contact_start - 1 ! C indexing
263 transport_env%contacts_data((i - 1)*stride_contacts + 3) = contact_natoms
264 transport_env%contacts_data((i - 1)*stride_contacts + 4) = contact_injsign
265
266 IF (injecting_contact) THEN
267 transport_env%contacts_data((i - 1)*stride_contacts + 5) = 1
268 ELSE
269 transport_env%contacts_data((i - 1)*stride_contacts + 5) = 0
270 END IF
271 END DO
272 transport_env%params%contacts_data = c_loc(transport_env%contacts_data(1))
273 ELSE
274 cpabort("No contact region is defined.")
275 END IF
276
277 CALL timestop(handle)
278
279 END SUBROUTINE transport_init_read_input
280
281! **************************************************************************************************
282!> \brief initializes the transport environment
283!> \param ks_env ...
284!> \param[inout] transport_env the transport env to be initialized
285!> \param[in] template_matrix template matrix to keep the sparsity of matrices fixed
286!> \author Mohammad Hossein Bani-Hashemian
287! **************************************************************************************************
288 SUBROUTINE transport_initialize(ks_env, transport_env, template_matrix)
289 TYPE(qs_ks_env_type), POINTER :: ks_env
290 TYPE(transport_env_type), INTENT(INOUT) :: transport_env
291 TYPE(dbcsr_type), INTENT(IN) :: template_matrix
292
293 CHARACTER(len=*), PARAMETER :: routinen = 'transport_initialize'
294
295 INTEGER :: handle, numnodes, unit_nr
296 TYPE(cp_logger_type), POINTER :: logger
297
298 CALL timeset(routinen, handle)
299
300 CALL cite_reference(bruck2014)
301
302 logger => cp_get_default_logger()
303 IF (logger%para_env%is_source()) THEN
304 unit_nr = cp_logger_get_default_unit_nr(logger, local=.true.)
305 ELSE
306 unit_nr = -1
307 END IF
308
309 numnodes = logger%para_env%num_pe
310
311 IF (dbcsr_has_symmetry(template_matrix)) THEN
312 CALL dbcsr_copy(transport_env%template_matrix_sym, template_matrix)
313 CALL dbcsr_desymmetrize(transport_env%template_matrix_sym, transport_env%template_matrix_nosym)
314 ELSE
315 CALL dbcsr_copy(transport_env%template_matrix_nosym, template_matrix)
316 CALL dbcsr_copy(transport_env%template_matrix_sym, template_matrix)
317 END IF
318
319 ALLOCATE (transport_env%dm_imag)
320 CALL dbcsr_create(transport_env%dm_imag, "imaginary DM", &
321 template=template_matrix, matrix_type=dbcsr_type_no_symmetry)
322 CALL dbcsr_set(transport_env%dm_imag, 0.0_dp)
323
324 CALL dbcsr_create(transport_env%csr_sparsity, "CSR sparsity", &
325 template=transport_env%template_matrix_sym)
326 CALL dbcsr_copy(transport_env%csr_sparsity, transport_env%template_matrix_sym)
327
328 CALL cp_dbcsr_to_csr_screening(ks_env, transport_env%csr_sparsity)
329
330 IF (.NOT. transport_env%csr_screening) CALL dbcsr_set(transport_env%csr_sparsity, 1.0_dp)
331 CALL dbcsr_csr_create_from_dbcsr(transport_env%template_matrix_nosym, &
332 transport_env%s_matrix, &
333 dbcsr_csr_dbcsr_blkrow_dist, &
334 csr_sparsity=transport_env%csr_sparsity, &
335 numnodes=numnodes)
336
337 CALL dbcsr_csr_print_sparsity(transport_env%s_matrix, unit_nr)
338
339 CALL dbcsr_convert_dbcsr_to_csr(transport_env%template_matrix_nosym, transport_env%s_matrix)
340
341 CALL dbcsr_csr_create(transport_env%ks_matrix, transport_env%s_matrix)
342 CALL dbcsr_csr_create(transport_env%p_matrix, transport_env%s_matrix)
343 CALL dbcsr_csr_create(transport_env%imagp_matrix, transport_env%s_matrix)
344
345 CALL timestop(handle)
346
347 END SUBROUTINE transport_initialize
348
349! **************************************************************************************************
350!> \brief SCF calcualtion with an externally evaluated density matrix
351!> \param[inout] transport_env transport environment
352!> \param[in] matrix_s DBCSR overlap matrix
353!> \param[in] matrix_ks DBCSR Kohn-Sham matrix
354!> \param[inout] matrix_p DBCSR density matrix
355!> \param[in] nelectron_spin number of electrons
356!> \param[in] natoms number of atoms
357!> \param[in] energy_diff scf energy difference
358!> \param[in] iscf the current scf iteration
359!> \param[in] extra_scf whether or not an extra scf step will be performed
360!> \par History
361!> 12.2012 created [Hossein Bani-Hashemian]
362!> 12.2014 revised [Hossein Bani-Hashemian]
363!> \author Mohammad Hossein Bani-Hashemian
364! **************************************************************************************************
365 SUBROUTINE external_scf_method(transport_env, matrix_s, matrix_ks, matrix_p, &
366 nelectron_spin, natoms, energy_diff, iscf, extra_scf)
367
368 TYPE(transport_env_type), INTENT(INOUT) :: transport_env
369 TYPE(dbcsr_type), INTENT(IN) :: matrix_s, matrix_ks
370 TYPE(dbcsr_type), INTENT(INOUT) :: matrix_p
371 INTEGER, INTENT(IN) :: nelectron_spin, natoms
372 REAL(dp), INTENT(IN) :: energy_diff
373 INTEGER, INTENT(IN) :: iscf
374 LOGICAL, INTENT(IN) :: extra_scf
375
376 CHARACTER(len=*), PARAMETER :: routinen = 'external_scf_method'
377
378 TYPE(cp2k_csr_interop_type) :: imagp_mat, ks_mat, p_mat, s_mat
379
380 PROCEDURE(c_scf_routine), POINTER :: c_method
381 INTEGER :: handle
382
383 CALL timeset(routinen, handle)
384
385 CALL c_f_procpointer(transport_env%ext_c_method_ptr, c_method)
386 IF (.NOT. c_associated(transport_env%ext_c_method_ptr)) &
387 CALL cp_abort(__location__, &
388 "MISSING C/C++ ROUTINE: The TRANSPORT section is meant to be used together with an external "// &
389 "program, e.g. the quantum transport code OMEN, that provides CP2K with a density matrix.")
390
391 transport_env%params%n_occ = nelectron_spin
392 transport_env%params%n_atoms = natoms
393 transport_env%params%energy_diff = energy_diff
394 transport_env%params%evoltfactor = evolt
395 transport_env%params%e_charge = e_charge
396 transport_env%params%boltzmann = boltzmann
397 transport_env%params%h_bar = h_bar
398 transport_env%params%iscf = iscf
399 transport_env%params%extra_scf = LOGICAL(extra_scf, C_BOOL) ! C_BOOL and Fortran logical don't have the same size
400
401 CALL csr_interop_nullify(s_mat)
402 CALL csr_interop_nullify(ks_mat)
403 CALL csr_interop_nullify(p_mat)
404 CALL csr_interop_nullify(imagp_mat)
405
406 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_s, keep_sparsity=.true.)
407 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%s_matrix, s_mat)
408
409 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_ks, keep_sparsity=.true.)
410 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%ks_matrix, ks_mat)
411
412 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_p, keep_sparsity=.true.)
413 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%p_matrix, p_mat)
414
415 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_s, keep_sparsity=.true.)
416 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%imagp_matrix, imagp_mat)
417
418 CALL c_method(transport_env%params, s_mat, ks_mat, p_mat, imagp_mat)
419
420 CALL convert_csr_interop_to_dbcsr(p_mat, transport_env%p_matrix, transport_env%template_matrix_nosym)
421 CALL dbcsr_copy(matrix_p, transport_env%template_matrix_nosym)
422
423 CALL convert_csr_interop_to_dbcsr(imagp_mat, transport_env%imagp_matrix, transport_env%template_matrix_nosym)
424 CALL dbcsr_copy(transport_env%dm_imag, transport_env%template_matrix_nosym)
425
426 CALL timestop(handle)
427
428 END SUBROUTINE external_scf_method
429
430! **************************************************************************************************
431!> \brief converts a DBCSR matrix to a C-interoperable CSR matrix
432!> \param[in] dbcsr_mat DBCSR matrix to be converted
433!> \param[inout] csr_mat auxiliary CSR matrix
434!> \param[inout] csr_interop_mat C-interoperable CSR matrix
435!> \author Mohammad Hossein Bani-Hashemian
436! **************************************************************************************************
437 SUBROUTINE convert_dbcsr_to_csr_interop(dbcsr_mat, csr_mat, csr_interop_mat)
438
439 TYPE(dbcsr_type), INTENT(IN) :: dbcsr_mat
440 TYPE(dbcsr_csr_type), INTENT(INOUT) :: csr_mat
441 TYPE(cp2k_csr_interop_type), INTENT(INOUT) :: csr_interop_mat
442
443 CHARACTER(LEN=*), PARAMETER :: routinen = 'convert_dbcsr_to_csr_interop'
444
445 INTEGER :: handle
446 INTEGER, ALLOCATABLE, DIMENSION(:) :: nrows_local_all, first_row_all
447 INTEGER(C_INT), DIMENSION(:), POINTER :: colind_local, rowptr_local, nzerow_local
448 REAL(c_double), DIMENSION(:), POINTER :: nzvals_local
449 TYPE(cp_logger_type), POINTER :: logger
450
451 CALL timeset(routinen, handle)
452
453 logger => cp_get_default_logger()
454
455! dbcsr to csr
456 CALL dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)
457
458! csr to csr_interop
459 rowptr_local => csr_mat%rowptr_local
460 colind_local => csr_mat%colind_local
461 nzerow_local => csr_mat%nzerow_local
462 nzvals_local => csr_mat%nzval_local%r_dp ! support real double percision for now
463
464 IF (SIZE(rowptr_local) .EQ. 0) THEN
465 csr_interop_mat%rowptr_local = c_null_ptr
466 ELSE
467 csr_interop_mat%rowptr_local = c_loc(rowptr_local(1))
468 END IF
469
470 IF (SIZE(colind_local) .EQ. 0) THEN
471 csr_interop_mat%colind_local = c_null_ptr
472 ELSE
473 csr_interop_mat%colind_local = c_loc(colind_local(1))
474 END IF
475
476 IF (SIZE(nzerow_local) .EQ. 0) THEN
477 csr_interop_mat%nzerow_local = c_null_ptr
478 ELSE
479 csr_interop_mat%nzerow_local = c_loc(nzerow_local(1))
480 END IF
481
482 IF (SIZE(nzvals_local) .EQ. 0) THEN
483 csr_interop_mat%nzvals_local = c_null_ptr
484 ELSE
485 csr_interop_mat%nzvals_local = c_loc(nzvals_local(1))
486 END IF
487
488 associate(mp_group => logger%para_env, mepos => logger%para_env%mepos, num_pe => logger%para_env%num_pe)
489 ALLOCATE (nrows_local_all(0:num_pe - 1), first_row_all(0:num_pe - 1))
490 CALL mp_group%allgather(csr_mat%nrows_local, nrows_local_all)
491 CALL cumsum_i(nrows_local_all, first_row_all)
492
493 IF (mepos .EQ. 0) THEN
494 csr_interop_mat%first_row = 0
495 ELSE
496 csr_interop_mat%first_row = first_row_all(mepos - 1)
497 END IF
498 END associate
499 csr_interop_mat%nrows_total = csr_mat%nrows_total
500 csr_interop_mat%ncols_total = csr_mat%ncols_total
501 csr_interop_mat%nze_local = csr_mat%nze_local
502 IF (csr_mat%nze_total > huge(csr_interop_mat%nze_total)) THEN
503 cpabort("overflow in nze")
504 END IF
505 csr_interop_mat%nze_total = int(csr_mat%nze_total, kind=kind(csr_interop_mat%nze_total))
506 csr_interop_mat%nrows_local = csr_mat%nrows_local
507 csr_interop_mat%data_type = csr_mat%nzval_local%data_type
508
509 CALL timestop(handle)
510
511 CONTAINS
512! **************************************************************************************************
513!> \brief cumulative sum of a 1d array of integers
514!> \param[in] arr input array
515!> \param[out] cumsum cumulative sum of the input array
516! **************************************************************************************************
517 SUBROUTINE cumsum_i(arr, cumsum)
518 INTEGER, DIMENSION(:), INTENT(IN) :: arr
519 INTEGER, DIMENSION(SIZE(arr)), INTENT(OUT) :: cumsum
520
521 INTEGER :: i
522
523 cumsum(1) = arr(1)
524 DO i = 2, SIZE(arr)
525 cumsum(i) = cumsum(i - 1) + arr(i)
526 END DO
527 END SUBROUTINE cumsum_i
528
529 END SUBROUTINE convert_dbcsr_to_csr_interop
530
531! **************************************************************************************************
532!> \brief converts a C-interoperable CSR matrix to a DBCSR matrix
533!> \param[in] csr_interop_mat C-interoperable CSR matrix
534!> \param[inout] csr_mat auxiliary CSR matrix
535!> \param[inout] dbcsr_mat DBCSR matrix
536!> \author Mohammad Hossein Bani-Hashemian
537! **************************************************************************************************
538 SUBROUTINE convert_csr_interop_to_dbcsr(csr_interop_mat, csr_mat, dbcsr_mat)
539
540 TYPE(cp2k_csr_interop_type), INTENT(IN) :: csr_interop_mat
541 TYPE(dbcsr_csr_type), INTENT(INOUT) :: csr_mat
542 TYPE(dbcsr_type), INTENT(INOUT) :: dbcsr_mat
543
544 CHARACTER(LEN=*), PARAMETER :: routinen = 'convert_csr_interop_to_dbcsr'
545
546 INTEGER :: data_type, handle, ncols_total, &
547 nrows_local, nrows_total, nze_local, &
548 nze_total
549 INTEGER, DIMENSION(:), POINTER :: colind_local, nzerow_local, rowptr_local
550 REAL(dp), DIMENSION(:), POINTER :: nzvals_local
551
552 CALL timeset(routinen, handle)
553
554! csr_interop to csr
555 CALL csr_interop_matrix_get_info(csr_interop_mat, &
556 nrows_total=nrows_total, ncols_total=ncols_total, nze_local=nze_local, &
557 nze_total=nze_total, nrows_local=nrows_local, data_type=data_type, &
558 rowptr_local=rowptr_local, colind_local=colind_local, &
559 nzerow_local=nzerow_local, nzvals_local=nzvals_local)
560
561 csr_mat%nrows_total = nrows_total
562 csr_mat%ncols_total = ncols_total
563 csr_mat%nze_local = nze_local
564 csr_mat%nze_total = nze_total
565 csr_mat%nrows_local = nrows_local
566 csr_mat%nzval_local%data_type = data_type
567
568 csr_mat%rowptr_local = rowptr_local
569 csr_mat%colind_local = colind_local
570 csr_mat%nzerow_local = nzerow_local
571 csr_mat%nzval_local%r_dp = nzvals_local
572
573! csr to dbcsr
574 CALL dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
575
576 CALL timestop(handle)
577
578 END SUBROUTINE convert_csr_interop_to_dbcsr
579
580! **************************************************************************************************
581!> \brief extraxts zeff (effective nuclear charges per atom) and nsgf (the size
582!> of spherical Gaussian basis functions per atom) from qs_env and initializes
583!> the corresponding arrays in transport_env%params
584!> \param[in] qs_env qs environment
585!> \param[inout] transport_env transport environment
586!> \author Mohammad Hossein Bani-Hashemian
587! **************************************************************************************************
588 SUBROUTINE transport_set_contact_params(qs_env, transport_env)
589 TYPE(qs_environment_type), POINTER :: qs_env
590 TYPE(transport_env_type), INTENT(INOUT) :: transport_env
591
592 INTEGER :: i, iat, ikind, natom, nkind
593 INTEGER, DIMENSION(:), POINTER :: atom_list
594 REAL(kind=dp) :: zeff
595 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
596 TYPE(atomic_kind_type), POINTER :: atomic_kind
597 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
598 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
599
600 CALL get_qs_env(qs_env, nkind=nkind, natom=natom)
601 CALL get_qs_env(qs_env, particle_set=particle_set, &
602 qs_kind_set=qs_kind_set, &
603 atomic_kind_set=atomic_kind_set)
604
605 ALLOCATE (transport_env%nsgf(natom))
606 ALLOCATE (transport_env%zeff(natom))
607 CALL get_particle_set(particle_set, qs_kind_set, nsgf=transport_env%nsgf)
608
609 ! reference charges
610 DO ikind = 1, nkind
611 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff)
612 atomic_kind => atomic_kind_set(ikind)
613 CALL get_atomic_kind(atomic_kind, atom_list=atom_list)
614 DO iat = 1, SIZE(atom_list)
615 i = atom_list(iat)
616 transport_env%zeff(i) = zeff
617 END DO
618 END DO
619
620 IF (natom .EQ. 0) THEN
621 transport_env%params%nsgf = c_null_ptr
622 transport_env%params%zeff = c_null_ptr
623 ELSE
624 transport_env%params%nsgf = c_loc(transport_env%nsgf(1))
625 transport_env%params%zeff = c_loc(transport_env%zeff(1))
626 END IF
627
628 END SUBROUTINE transport_set_contact_params
629
630!**************************************************************************************************
631!> \brief evaluates current density using the imaginary part of the density matrix and prints it
632!> into cube files
633!> \param[in] input the input
634!> \param[in] qs_env qs environment
635!> \author Mohammad Hossein Bani-Hashemian
636! **************************************************************************************************
637 SUBROUTINE transport_current(input, qs_env)
638 TYPE(section_vals_type), POINTER :: input
639 TYPE(qs_environment_type), POINTER :: qs_env
640
641 CHARACTER(len=*), PARAMETER :: routinen = 'transport_current'
642
643 CHARACTER(len=14) :: ext
644 CHARACTER(len=2) :: sdir
645 INTEGER :: dir, handle, unit_nr
646 LOGICAL :: do_current_cube, do_transport, mpi_io
647 TYPE(cp_logger_type), POINTER :: logger
648 TYPE(current_env_type) :: current_env
649 TYPE(dbcsr_type), POINTER :: zero
650 TYPE(dft_control_type), POINTER :: dft_control
651 TYPE(particle_list_type), POINTER :: particles
652 TYPE(pw_c1d_gs_type) :: gs
653 TYPE(pw_c1d_gs_type), DIMENSION(:), POINTER :: rho_g
654 TYPE(pw_env_type), POINTER :: pw_env
655 TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
656 TYPE(pw_r3d_rs_type) :: rs
657 TYPE(pw_r3d_rs_type), DIMENSION(:), POINTER :: rho_r
658 TYPE(qs_rho_type), POINTER :: rho
659 TYPE(qs_subsys_type), POINTER :: subsys
660 TYPE(section_vals_type), POINTER :: dft_section
661 TYPE(transport_env_type), POINTER :: transport_env
662
663 CALL timeset(routinen, handle)
664
665 logger => cp_get_default_logger()
666 dft_section => section_vals_get_subs_vals(input, "DFT")
667 CALL get_qs_env(qs_env=qs_env, &
668 subsys=subsys, &
669 pw_env=pw_env, &
670 transport_env=transport_env, &
671 do_transport=do_transport, &
672 dft_control=dft_control, &
673 rho=rho)
674 CALL qs_subsys_get(subsys, particles=particles)
675 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
676 CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g)
677
678 do_current_cube = btest(cp_print_key_should_output(logger%iter_info, input, &
679 "DFT%TRANSPORT%PRINT%CURRENT"), cp_p_file)
680
681 ! check if transport is active i.e. the imaginary dm has been actually passed to cp2k by the external code
682 IF (do_transport) THEN
683 IF (c_associated(transport_env%ext_c_method_ptr)) THEN
684
685 ! calculate_jrho_resp uses sab_all which is not associated in DFTB environment
686 IF (dft_control%qs_control%dftb) cpabort("Current is not available for DFTB.")
687 IF (dft_control%qs_control%xtb) cpabort("Current is not available for xTB.")
688
689 ! now do the current
690 IF (do_current_cube) THEN
691 current_env%gauge = -1
692 current_env%gauge_init = .false.
693
694 CALL auxbas_pw_pool%create_pw(rs)
695 CALL auxbas_pw_pool%create_pw(gs)
696
697 NULLIFY (zero)
698 ALLOCATE (zero)
699 CALL dbcsr_create(zero, template=transport_env%dm_imag)
700 CALL dbcsr_copy(zero, transport_env%dm_imag)
701 CALL dbcsr_set(zero, 0.0_dp)
702
703 DO dir = 1, 3
704 CALL pw_zero(rs)
705 CALL pw_zero(gs)
706 CALL calculate_jrho_resp(zero, transport_env%dm_imag, &
707 zero, zero, dir, dir, rs, gs, qs_env, current_env, &
708 retain_rsgrid=.true.)
709 SELECT CASE (dir)
710 CASE (1)
711 sdir = "-x"
712 CASE (2)
713 sdir = "-y"
714 CASE (3)
715 sdir = "-z"
716 END SELECT
717 ext = sdir//".cube"
718 mpi_io = .true.
719 unit_nr = cp_print_key_unit_nr(logger, dft_section, "TRANSPORT%PRINT%CURRENT", &
720 extension=ext, file_status="REPLACE", file_action="WRITE", &
721 log_filename=.false., mpi_io=mpi_io)
722 CALL cp_pw_to_cube(rs, unit_nr, "Transport current", particles=particles, &
723 stride=section_get_ivals(dft_section, "TRANSPORT%PRINT%CURRENT%STRIDE"), &
724 mpi_io=mpi_io)
725 CALL cp_print_key_finished_output(unit_nr, logger, dft_section, "TRANSPORT%PRINT%CURRENT", &
726 mpi_io=mpi_io)
727 END DO
728
729 CALL dbcsr_deallocate_matrix(zero)
730 CALL auxbas_pw_pool%give_back_pw(rs)
731 CALL auxbas_pw_pool%give_back_pw(gs)
732 END IF
733 END IF
734
735 END IF
736
737 CALL timestop(handle)
738
739 END SUBROUTINE transport_current
740
741!**************************************************************************************************
742!> \brief post scf calculations for transport
743!> \param[in] qs_env qs environment
744!> \author Mohammad Hossein Bani-Hashemian
745! **************************************************************************************************
746 SUBROUTINE qs_scf_post_transport(qs_env)
747 TYPE(qs_environment_type), POINTER :: qs_env
748
749 CHARACTER(len=*), PARAMETER :: routinen = 'qs_scf_post_transport'
750
751 INTEGER :: handle
752 TYPE(section_vals_type), POINTER :: input
753
754 CALL timeset(routinen, handle)
755
756 NULLIFY (input)
757
758 CALL get_qs_env(qs_env=qs_env, &
759 input=input)
760
761 CALL transport_current(input, qs_env)
762
763 CALL timestop(handle)
764
765 END SUBROUTINE qs_scf_post_transport
766
767END MODULE transport
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public bruck2014
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
logical function, public dbcsr_has_symmetry(matrix)
...
subroutine, public dbcsr_convert_dbcsr_to_csr(dbcsr_mat, csr_mat)
...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
...
subroutine, public dbcsr_desymmetrize(matrix_a, matrix_b)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_csr_create_from_dbcsr(dbcsr_mat, csr_mat, dist_format, csr_sparsity, numnodes)
...
subroutine, public dbcsr_set(matrix, alpha)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
A wrapper around pw_to_cube() which accepts particle_list_type.
subroutine, public cp_pw_to_cube(pw, unit_nr, title, particles, stride, zero_tails, silent, mpi_io)
...
objects that represent the structure of input sections and the data contained in an input section
integer function, dimension(:), pointer, public section_get_ivals(section_vals, keyword_name)
...
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
represent a simple array based list of the given type
Define methods related to particle_type.
subroutine, public get_particle_set(particle_set, qs_kind_set, first_sgf, last_sgf, nsgf, nmao, basis)
Get the components of a particle set.
Define the data structure for the particle information.
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public boltzmann
Definition physcon.F:129
real(kind=dp), parameter, public e_charge
Definition physcon.F:106
real(kind=dp), parameter, public h_bar
Definition physcon.F:103
real(kind=dp), parameter, public evolt
Definition physcon.F:183
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Set the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
given the response wavefunctions obtained by the application of the (rxp), p, and ((dk-dl)xp) operato...
subroutine, public calculate_jrho_resp(mat_d0, mat_jp, mat_jp_rii, mat_jp_riii, ib, idir, current_rs, current_gs, qs_env, current_env, soft_valid, retain_rsgrid)
Calculation of the idir component of the response current density in the presence of a constant magne...
Type definitiona for linear response calculations.
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
types that represent a quickstep subsys
subroutine, public qs_subsys_get(subsys, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, cp_subsys, nelectron_total, nelectron_spin)
...
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 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
routines for DFT+NEGF calculations (coupling with the quantum transport code OMEN)
Definition transport.F:19
subroutine, public transport_env_create(qs_env)
creates the transport environment
Definition transport.F:124
subroutine, public external_scf_method(transport_env, matrix_s, matrix_ks, matrix_p, nelectron_spin, natoms, energy_diff, iscf, extra_scf)
SCF calcualtion with an externally evaluated density matrix.
Definition transport.F:367
subroutine, public transport_initialize(ks_env, transport_env, template_matrix)
initializes the transport environment
Definition transport.F:289
subroutine, public qs_scf_post_transport(qs_env)
post scf calculations for transport
Definition transport.F:747
Provides all information about an atomic kind.
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
type of a logger, at the moment it contains just a print level starting at which level it should be l...
contained for different pw related things
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.