20 USE iso_c_binding,
ONLY: c_associated,&
83#include "./base/base_uses.f90"
88 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'transport'
94 INTERFACE c_func_interface
104 SUBROUTINE c_scf_routine(cp2k_transport_params, s_mat, ks_mat, p_mat, imagp_mat)
BIND(C)
106 TYPE(cp2k_transport_parameters),
VALUE,
INTENT(IN) :: cp2k_transport_params
107 TYPE(cp2k_csr_interop_type),
VALUE,
INTENT(IN) :: s_mat
108 TYPE(cp2k_csr_interop_type),
VALUE,
INTENT(IN) :: ks_mat
109 TYPE(cp2k_csr_interop_type),
INTENT(INOUT) :: p_mat
110 TYPE(cp2k_csr_interop_type),
INTENT(INOUT) :: imagp_mat
111 END SUBROUTINE c_scf_routine
112 END INTERFACE c_func_interface
124 CHARACTER(LEN=*),
PARAMETER :: routinen =
'transport_env_create'
131 CALL timeset(routinen, handle)
134 transport_env=transport_env, &
135 dft_control=dft_control, &
138 cpassert(.NOT.
ASSOCIATED(transport_env))
140 ALLOCATE (transport_env)
142 CALL transport_init_read_input(input, transport_env)
143 CALL transport_set_contact_params(qs_env, transport_env)
145 CALL set_qs_env(qs_env, transport_env=transport_env)
147 CALL timestop(handle)
158 SUBROUTINE transport_init_read_input(input, transport_env)
162 CHARACTER(len=*),
PARAMETER :: routinen =
'transport_init_read_input'
164 INTEGER :: contact_bandwidth, contact_injsign, &
165 contact_natoms, contact_start, handle, &
166 i, n_contacts, stride_contacts
167 INTEGER,
DIMENSION(:),
POINTER :: i_vals
168 LOGICAL :: contact_explicit, injecting_contact, &
169 obc_equilibrium, one_circle
171 pexsi_section, transport_section
173 CALL timeset(routinen, handle)
179 CALL section_vals_get(contact_section, explicit=contact_explicit, n_repetition=n_contacts)
183 CALL section_vals_val_get(transport_section,
"TRANSPORT_METHOD", i_val=transport_env%params%method)
184 CALL section_vals_val_get(transport_section,
"INJECTION_METHOD", i_val=transport_env%params%injection_method)
186 i_val=transport_env%params%rlaxis_integration_method)
187 CALL section_vals_val_get(transport_section,
"QT_FORMALISM", i_val=transport_env%params%qt_formalism)
188 CALL section_vals_val_get(transport_section,
"LINEAR_SOLVER", i_val=transport_env%params%linear_solver)
190 i_val=transport_env%params%matrixinv_method)
191 CALL section_vals_val_get(transport_section,
"CONTACT_FILLING", i_val=transport_env%params%transport_neutral)
193 CALL section_vals_val_get(transport_section,
"NUM_INTERVAL", i_val=transport_env%params%num_interval)
195 i_val=transport_env%params%tasks_per_energy_point)
196 CALL section_vals_val_get(transport_section,
"TASKS_PER_POLE", i_val=transport_env%params%tasks_per_pole)
198 CALL section_vals_val_get(transport_section,
"GPUS_PER_POINT", i_val=transport_env%params%gpus_per_point)
199 CALL section_vals_val_get(transport_section,
"N_POINTS_INV", i_val=transport_env%params%n_points_inv)
200 CALL section_vals_val_get(transport_section,
"COLZERO_THRESHOLD", r_val=transport_env%params%colzero_threshold)
202 CALL section_vals_val_get(transport_section,
"EPS_LIMIT_CC", r_val=transport_env%params%eps_limit_cc)
205 r_val=transport_env%params%eps_singularity_curvatures)
207 CALL section_vals_val_get(transport_section,
"EPS_EIGVAL_DEGEN", r_val=transport_env%params%eps_eigval_degen)
209 CALL section_vals_val_get(transport_section,
"ENERGY_INTERVAL", r_val=transport_env%params%energy_interval)
210 CALL section_vals_val_get(transport_section,
"MIN_INTERVAL", r_val=transport_env%params%min_interval)
211 CALL section_vals_val_get(transport_section,
"TEMPERATURE", r_val=transport_env%params%temperature)
212 CALL section_vals_val_get(transport_section,
"DENSITY_MIXING", r_val=transport_env%params%dens_mixing)
213 CALL section_vals_val_get(transport_section,
"CSR_SCREENING", l_val=transport_env%csr_screening)
217 IF (obc_equilibrium)
THEN
218 transport_env%params%obc_equilibrium = .true.
220 transport_env%params%obc_equilibrium = .false.
224 transport_env%params%cutout = i_vals
227 i_val=transport_env%params%tasks_per_integration_point)
228 CALL section_vals_val_get(beyn_section,
"N_POINTS_BEYN", i_val=transport_env%params%n_points_beyn)
234 transport_env%params%ncrc_beyn = 1
236 transport_env%params%ncrc_beyn = 2
240 CALL section_vals_val_get(pexsi_section,
"ROW_ORDERING", i_val=transport_env%params%row_ordering)
242 CALL section_vals_val_get(pexsi_section,
"NP_SYMB_FACT", i_val=transport_env%params%pexsi_np_symb_fact)
244 IF (contact_explicit)
THEN
245 transport_env%params%num_contacts = n_contacts
247 transport_env%params%stride_contacts = stride_contacts
248 ALLOCATE (transport_env%contacts_data(stride_contacts*n_contacts))
251 CALL section_vals_val_get(contact_section,
"BANDWIDTH", i_rep_section=i, i_val=contact_bandwidth)
254 CALL section_vals_val_get(contact_section,
"INJECTION_SIGN", i_rep_section=i, i_val=contact_injsign)
255 CALL section_vals_val_get(contact_section,
"INJECTING_CONTACT", i_rep_section=i, l_val=injecting_contact)
257 IF (contact_natoms <= 0) cpabort(
"Number of atoms in contact region needs to be defined.")
259 transport_env%contacts_data((i - 1)*stride_contacts + 1) = contact_bandwidth
260 transport_env%contacts_data((i - 1)*stride_contacts + 2) = contact_start - 1
261 transport_env%contacts_data((i - 1)*stride_contacts + 3) = contact_natoms
262 transport_env%contacts_data((i - 1)*stride_contacts + 4) = contact_injsign
264 IF (injecting_contact)
THEN
265 transport_env%contacts_data((i - 1)*stride_contacts + 5) = 1
267 transport_env%contacts_data((i - 1)*stride_contacts + 5) = 0
270 transport_env%params%contacts_data = c_loc(transport_env%contacts_data(1))
272 cpabort(
"No contact region is defined.")
275 CALL timestop(handle)
277 END SUBROUTINE transport_init_read_input
289 TYPE(
dbcsr_type),
INTENT(IN) :: template_matrix
291 CHARACTER(len=*),
PARAMETER :: routinen =
'transport_initialize'
293 INTEGER :: handle, numnodes, unit_nr
296 CALL timeset(routinen, handle)
301 IF (logger%para_env%is_source())
THEN
307 numnodes = logger%para_env%num_pe
310 CALL dbcsr_copy(transport_env%template_matrix_sym, template_matrix)
311 CALL dbcsr_desymmetrize(transport_env%template_matrix_sym, transport_env%template_matrix_nosym)
313 CALL dbcsr_copy(transport_env%template_matrix_nosym, template_matrix)
314 CALL dbcsr_copy(transport_env%template_matrix_sym, template_matrix)
317 ALLOCATE (transport_env%dm_imag)
318 CALL dbcsr_create(transport_env%dm_imag,
"imaginary DM", &
319 template=template_matrix, matrix_type=dbcsr_type_no_symmetry)
320 CALL dbcsr_set(transport_env%dm_imag, 0.0_dp)
322 CALL dbcsr_create(transport_env%csr_sparsity,
"CSR sparsity", &
323 template=transport_env%template_matrix_sym)
324 CALL dbcsr_copy(transport_env%csr_sparsity, transport_env%template_matrix_sym)
328 IF (.NOT. transport_env%csr_screening)
CALL dbcsr_set(transport_env%csr_sparsity, 1.0_dp)
330 transport_env%s_matrix, &
331 dbcsr_csr_dbcsr_blkrow_dist, &
332 csr_sparsity=transport_env%csr_sparsity, &
335 CALL dbcsr_csr_print_sparsity(transport_env%s_matrix, unit_nr)
339 CALL dbcsr_csr_create(transport_env%ks_matrix, transport_env%s_matrix)
340 CALL dbcsr_csr_create(transport_env%p_matrix, transport_env%s_matrix)
341 CALL dbcsr_csr_create(transport_env%imagp_matrix, transport_env%s_matrix)
343 CALL timestop(handle)
364 nelectron_spin, natoms, energy_diff, iscf, extra_scf)
367 TYPE(
dbcsr_type),
INTENT(IN) :: matrix_s, matrix_ks
369 INTEGER,
INTENT(IN) :: nelectron_spin, natoms
370 REAL(
dp),
INTENT(IN) :: energy_diff
371 INTEGER,
INTENT(IN) :: iscf
372 LOGICAL,
INTENT(IN) :: extra_scf
374 CHARACTER(len=*),
PARAMETER :: routinen =
'external_scf_method'
378 PROCEDURE(c_scf_routine),
POINTER :: c_method
381 CALL timeset(routinen, handle)
383 CALL c_f_procpointer(transport_env%ext_c_method_ptr, c_method)
384 IF (.NOT. c_associated(transport_env%ext_c_method_ptr))
THEN
385 CALL cp_abort(__location__, &
386 "MISSING C/C++ ROUTINE: The TRANSPORT section is meant to be used together with an external "// &
387 "program, e.g. the quantum transport code OMEN, that provides CP2K with a density matrix.")
390 transport_env%params%n_occ = nelectron_spin
391 transport_env%params%n_atoms = natoms
392 transport_env%params%energy_diff = energy_diff
393 transport_env%params%evoltfactor =
evolt
394 transport_env%params%e_charge =
e_charge
395 transport_env%params%boltzmann =
boltzmann
396 transport_env%params%h_bar =
h_bar
397 transport_env%params%iscf = iscf
398 transport_env%params%extra_scf =
LOGICAL(extra_scf, C_BOOL)
405 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_s, keep_sparsity=.true.)
406 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%s_matrix, s_mat)
408 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_ks, keep_sparsity=.true.)
409 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%ks_matrix, ks_mat)
411 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_p, keep_sparsity=.true.)
412 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%p_matrix, p_mat)
414 CALL dbcsr_copy(transport_env%template_matrix_sym, matrix_s, keep_sparsity=.true.)
415 CALL convert_dbcsr_to_csr_interop(transport_env%template_matrix_sym, transport_env%imagp_matrix, imagp_mat)
417 CALL c_method(transport_env%params, s_mat, ks_mat, p_mat, imagp_mat)
419 CALL convert_csr_interop_to_dbcsr(p_mat, transport_env%p_matrix, transport_env%template_matrix_nosym)
420 CALL dbcsr_copy(matrix_p, transport_env%template_matrix_nosym)
422 CALL convert_csr_interop_to_dbcsr(imagp_mat, transport_env%imagp_matrix, transport_env%template_matrix_nosym)
423 CALL dbcsr_copy(transport_env%dm_imag, transport_env%template_matrix_nosym)
425 CALL timestop(handle)
436 SUBROUTINE convert_dbcsr_to_csr_interop(dbcsr_mat, csr_mat, csr_interop_mat)
439 TYPE(dbcsr_csr_type),
INTENT(INOUT) :: csr_mat
442 CHARACTER(LEN=*),
PARAMETER :: routinen =
'convert_dbcsr_to_csr_interop'
445 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: nrows_local_all, first_row_all
446 INTEGER(C_INT),
DIMENSION(:),
POINTER :: colind_local, rowptr_local, nzerow_local
447 REAL(c_double),
DIMENSION(:),
POINTER :: nzvals_local
450 CALL timeset(routinen, handle)
458 rowptr_local => csr_mat%rowptr_local
459 colind_local => csr_mat%colind_local
460 nzerow_local => csr_mat%nzerow_local
461 nzvals_local => csr_mat%nzval_local%r_dp
463 IF (
SIZE(rowptr_local) == 0)
THEN
464 csr_interop_mat%rowptr_local = c_null_ptr
466 csr_interop_mat%rowptr_local = c_loc(rowptr_local(1))
469 IF (
SIZE(colind_local) == 0)
THEN
470 csr_interop_mat%colind_local = c_null_ptr
472 csr_interop_mat%colind_local = c_loc(colind_local(1))
475 IF (
SIZE(nzerow_local) == 0)
THEN
476 csr_interop_mat%nzerow_local = c_null_ptr
478 csr_interop_mat%nzerow_local = c_loc(nzerow_local(1))
481 IF (
SIZE(nzvals_local) == 0)
THEN
482 csr_interop_mat%nzvals_local = c_null_ptr
484 csr_interop_mat%nzvals_local = c_loc(nzvals_local(1))
487 associate(mp_group => logger%para_env, mepos => logger%para_env%mepos, num_pe => logger%para_env%num_pe)
488 ALLOCATE (nrows_local_all(0:num_pe - 1), first_row_all(0:num_pe - 1))
489 CALL mp_group%allgather(csr_mat%nrows_local, nrows_local_all)
490 CALL cumsum_i(nrows_local_all, first_row_all)
493 csr_interop_mat%first_row = 0
495 csr_interop_mat%first_row = first_row_all(mepos - 1)
498 csr_interop_mat%nrows_total = csr_mat%nrows_total
499 csr_interop_mat%ncols_total = csr_mat%ncols_total
500 csr_interop_mat%nze_local = csr_mat%nze_local
501 IF (csr_mat%nze_total > huge(csr_interop_mat%nze_total))
THEN
502 cpabort(
"overflow in nze")
504 csr_interop_mat%nze_total = int(csr_mat%nze_total, kind=kind(csr_interop_mat%nze_total))
505 csr_interop_mat%nrows_local = csr_mat%nrows_local
506 csr_interop_mat%data_type = csr_mat%nzval_local%data_type
508 CALL timestop(handle)
516 SUBROUTINE cumsum_i(arr, cumsum)
517 INTEGER,
DIMENSION(:),
INTENT(IN) :: arr
518 INTEGER,
DIMENSION(SIZE(arr)),
INTENT(OUT) :: cumsum
524 cumsum(i) = cumsum(i - 1) + arr(i)
526 END SUBROUTINE cumsum_i
528 END SUBROUTINE convert_dbcsr_to_csr_interop
537 SUBROUTINE convert_csr_interop_to_dbcsr(csr_interop_mat, csr_mat, dbcsr_mat)
540 TYPE(dbcsr_csr_type),
INTENT(INOUT) :: csr_mat
541 TYPE(dbcsr_type),
INTENT(INOUT) :: dbcsr_mat
543 CHARACTER(LEN=*),
PARAMETER :: routinen =
'convert_csr_interop_to_dbcsr'
545 INTEGER :: data_type, handle, ncols_total, &
546 nrows_local, nrows_total, nze_local, &
548 INTEGER,
DIMENSION(:),
POINTER :: colind_local, nzerow_local, rowptr_local
549 REAL(dp),
DIMENSION(:),
POINTER :: nzvals_local
551 CALL timeset(routinen, handle)
554 CALL csr_interop_matrix_get_info(csr_interop_mat, &
555 nrows_total=nrows_total, ncols_total=ncols_total, nze_local=nze_local, &
556 nze_total=nze_total, nrows_local=nrows_local, data_type=data_type, &
557 rowptr_local=rowptr_local, colind_local=colind_local, &
558 nzerow_local=nzerow_local, nzvals_local=nzvals_local)
560 csr_mat%nrows_total = nrows_total
561 csr_mat%ncols_total = ncols_total
562 csr_mat%nze_local = nze_local
563 csr_mat%nze_total = nze_total
564 csr_mat%nrows_local = nrows_local
565 csr_mat%nzval_local%data_type = data_type
567 csr_mat%rowptr_local = rowptr_local
568 csr_mat%colind_local = colind_local
569 csr_mat%nzerow_local = nzerow_local
570 csr_mat%nzval_local%r_dp = nzvals_local
573 CALL dbcsr_convert_csr_to_dbcsr(dbcsr_mat, csr_mat)
575 CALL timestop(handle)
577 END SUBROUTINE convert_csr_interop_to_dbcsr
587 SUBROUTINE transport_set_contact_params(qs_env, transport_env)
588 TYPE(qs_environment_type),
POINTER :: qs_env
589 TYPE(transport_env_type),
INTENT(INOUT) :: transport_env
591 INTEGER :: i, iat, ikind, natom, nkind
592 INTEGER,
DIMENSION(:),
POINTER :: atom_list
593 REAL(kind=dp) :: zeff
594 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
595 TYPE(atomic_kind_type),
POINTER :: atomic_kind
596 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
597 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
599 CALL get_qs_env(qs_env, nkind=nkind, natom=natom)
600 CALL get_qs_env(qs_env, particle_set=particle_set, &
601 qs_kind_set=qs_kind_set, &
602 atomic_kind_set=atomic_kind_set)
604 ALLOCATE (transport_env%nsgf(natom))
605 ALLOCATE (transport_env%zeff(natom))
606 CALL get_particle_set(particle_set, qs_kind_set, nsgf=transport_env%nsgf)
610 CALL get_qs_kind(qs_kind_set(ikind), zeff=zeff)
611 atomic_kind => atomic_kind_set(ikind)
612 CALL get_atomic_kind(atomic_kind, atom_list=atom_list)
613 DO iat = 1,
SIZE(atom_list)
615 transport_env%zeff(i) = zeff
620 transport_env%params%nsgf = c_null_ptr
621 transport_env%params%zeff = c_null_ptr
623 transport_env%params%nsgf = c_loc(transport_env%nsgf(1))
624 transport_env%params%zeff = c_loc(transport_env%zeff(1))
627 END SUBROUTINE transport_set_contact_params
636 SUBROUTINE transport_current(input, qs_env)
637 TYPE(section_vals_type),
POINTER :: input
638 TYPE(qs_environment_type),
POINTER :: qs_env
640 CHARACTER(len=*),
PARAMETER :: routinen =
'transport_current'
642 CHARACTER(len=14) :: ext
643 CHARACTER(len=2) :: sdir
644 INTEGER :: dir, handle, unit_nr
645 LOGICAL :: do_current_cube, do_transport, mpi_io
646 TYPE(cp_logger_type),
POINTER :: logger
647 TYPE(current_env_type) :: current_env
648 TYPE(dbcsr_type),
POINTER :: zero
649 TYPE(dft_control_type),
POINTER :: dft_control
650 TYPE(particle_list_type),
POINTER :: particles
651 TYPE(pw_c1d_gs_type) :: gs
652 TYPE(pw_c1d_gs_type),
DIMENSION(:),
POINTER :: rho_g
653 TYPE(pw_env_type),
POINTER :: pw_env
654 TYPE(pw_pool_type),
POINTER :: auxbas_pw_pool
655 TYPE(pw_r3d_rs_type) :: rs
656 TYPE(pw_r3d_rs_type),
DIMENSION(:),
POINTER :: rho_r
657 TYPE(qs_rho_type),
POINTER :: rho
658 TYPE(qs_subsys_type),
POINTER :: subsys
659 TYPE(section_vals_type),
POINTER :: dft_section
660 TYPE(transport_env_type),
POINTER :: transport_env
662 CALL timeset(routinen, handle)
664 logger => cp_get_default_logger()
665 dft_section => section_vals_get_subs_vals(input,
"DFT")
666 CALL get_qs_env(qs_env=qs_env, &
669 transport_env=transport_env, &
670 do_transport=do_transport, &
671 dft_control=dft_control, &
673 CALL qs_subsys_get(subsys, particles=particles)
674 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
675 CALL qs_rho_get(rho, rho_r=rho_r, rho_g=rho_g)
677 do_current_cube = btest(cp_print_key_should_output(logger%iter_info, input, &
678 "DFT%TRANSPORT%PRINT%CURRENT"), cp_p_file)
681 IF (do_transport)
THEN
682 IF (c_associated(transport_env%ext_c_method_ptr))
THEN
685 IF (dft_control%qs_control%dftb) cpabort(
"Current is not available for DFTB.")
686 IF (dft_control%qs_control%xtb) cpabort(
"Current is not available for xTB.")
689 IF (do_current_cube)
THEN
690 current_env%gauge = -1
691 current_env%gauge_init = .false.
693 CALL auxbas_pw_pool%create_pw(rs)
694 CALL auxbas_pw_pool%create_pw(gs)
698 CALL dbcsr_create(zero, template=transport_env%dm_imag)
699 CALL dbcsr_copy(zero, transport_env%dm_imag)
700 CALL dbcsr_set(zero, 0.0_dp)
705 CALL calculate_jrho_resp(zero, transport_env%dm_imag, &
706 zero, zero, dir, dir, rs, gs, qs_env, current_env, &
707 retain_rsgrid=.true.)
718 unit_nr = cp_print_key_unit_nr(logger, dft_section,
"TRANSPORT%PRINT%CURRENT", &
719 extension=ext, file_status=
"REPLACE", file_action=
"WRITE", &
720 log_filename=.false., mpi_io=mpi_io)
721 CALL cp_pw_to_cube(rs, unit_nr,
"Transport current", particles=particles, &
722 stride=section_get_ivals(dft_section,
"TRANSPORT%PRINT%CURRENT%STRIDE"), &
724 CALL cp_print_key_finished_output(unit_nr, logger, dft_section,
"TRANSPORT%PRINT%CURRENT", &
728 CALL dbcsr_deallocate_matrix(zero)
729 CALL auxbas_pw_pool%give_back_pw(rs)
730 CALL auxbas_pw_pool%give_back_pw(gs)
736 CALL timestop(handle)
738 END SUBROUTINE transport_current
746 TYPE(qs_environment_type),
POINTER :: qs_env
748 CHARACTER(len=*),
PARAMETER :: routinen =
'qs_scf_post_transport'
751 TYPE(section_vals_type),
POINTER :: input
753 CALL timeset(routinen, handle)
757 CALL get_qs_env(qs_env=qs_env, &
760 CALL transport_current(input, qs_env)
762 CALL timestop(handle)
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)
...
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_to_csr_screening(ks_env, csr_sparsity)
Apply distance screening to refine sparsity pattern of matrices in CSR format (using eps_pgf_orb)....
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, zeff, stride, max_file_size_mb, zero_tails, silent, mpi_io)
...
Defines the basic variable types.
integer, parameter, public dp
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, ncgf)
Get the components of a particle set.
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public boltzmann
real(kind=dp), parameter, public e_charge
real(kind=dp), parameter, public h_bar
real(kind=dp), parameter, public evolt
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, mimic, 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, sab_cneo, 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, matrix_vhxc, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, mimic, 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, rhoz_cneo_set, 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, do_rixs, tb_tblite)
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, cneo_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, hund_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, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, 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)
subroutine, public transport_env_create(qs_env)
creates the transport environment
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.
subroutine, public transport_initialize(ks_env, transport_env, template_matrix)
initializes the transport environment
subroutine, public qs_scf_post_transport(qs_env)
post scf calculations for transport
Provides all information about an atomic kind.
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...
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a list of objects
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.