84#include "./base/base_uses.f90"
90 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_subgroups'
91 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .true.
106 LOGICAL :: is_split = .false.
108 INTEGER :: ngroups = -1
111 INTEGER,
DIMENSION(:),
ALLOCATABLE :: group_distribution
125 LOGICAL :: is_mgrid = .false.
134 DIMENSION(:),
POINTER :: sab_aux_fit => null(), sab_orb => null()
136 TYPE(
task_list_type),
POINTER :: task_list_aux_fit => null(), task_list_orb => null()
138 TYPE(
task_list_type),
POINTER :: task_list_aux_fit_soft => null(), task_list_orb_soft => null()
151 TYPE mgrid_saved_parameters
153 LOGICAL :: commensurate_mgrids = .false.
155 LOGICAL :: realspace_mgrids = .false.
157 LOGICAL :: skip_load_balance = .false.
159 REAL(kind=
dp) :: cutoff = 0.0_dp
161 REAL(kind=
dp) :: progression_factor = 0.0_dp
163 REAL(kind=
dp) :: relative_cutoff = 0.0_dp
165 REAL(kind=
dp),
DIMENSION(:),
POINTER :: e_cutoff => null()
166 END TYPE mgrid_saved_parameters
184 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(in) :: mos_occ, mos_active
185 INTEGER,
INTENT(in) :: kernel
187 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_sub_env_init'
189 INTEGER :: handle, ispin, nao, nao_aux, natom, &
190 nmo_active, nmo_occ, nspins
196 TYPE(mgrid_saved_parameters) :: mgrid_saved
200 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
203 CALL timeset(routinen, handle)
205 nspins =
SIZE(mos_occ)
207 CALL get_qs_env(qs_env, blacs_env=blacs_env_global, dft_control=dft_control, &
208 para_env=para_env_global, pw_env=pw_env_global)
210 tddfpt_control => dft_control%tddfpt2_control
211 qs_control => dft_control%qs_control
217 sub_env%is_split = tddfpt_control%nprocs > 0 .AND. tddfpt_control%nprocs*2 <= para_env_global%num_pe
219 ALLOCATE (sub_env%mos_occ(nspins))
220 ALLOCATE (sub_env%mos_active(nspins))
221 NULLIFY (sub_env%admm_A)
223 IF (sub_env%is_split)
THEN
224 ALLOCATE (sub_env%group_distribution(0:para_env_global%num_pe - 1))
226 ALLOCATE (sub_env%para_env)
227 CALL sub_env%para_env%from_split(comm=para_env_global, ngroups=sub_env%ngroups, &
228 group_distribution=sub_env%group_distribution, subgroup_min_size=tddfpt_control%nprocs)
231 NULLIFY (sub_env%blacs_env)
243 CALL cp_fm_get_info(mos_occ(ispin), nrow_global=nao, ncol_global=nmo_occ)
244 CALL cp_fm_struct_create(fm_struct, nrow_global=nao, ncol_global=nmo_occ, context=sub_env%blacs_env)
248 fm_dest_sub=sub_env%mos_occ(ispin), sub_env=sub_env)
252 CALL cp_fm_get_info(mos_active(ispin), nrow_global=nao, ncol_global=nmo_active)
253 CALL cp_fm_struct_create(fm_struct, nrow_global=nao, ncol_global=nmo_active, context=sub_env%blacs_env)
257 fm_dest_sub=sub_env%mos_active(ispin), sub_env=sub_env)
260 IF (dft_control%do_admm)
THEN
262 CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux, ncol_global=nao)
263 CALL cp_fm_struct_create(fm_struct, nrow_global=nao_aux, ncol_global=nao, context=sub_env%blacs_env)
264 ALLOCATE (sub_env%admm_A)
270 CALL para_env_global%retain()
271 sub_env%para_env => para_env_global
273 CALL blacs_env_global%retain()
274 sub_env%blacs_env => blacs_env_global
276 sub_env%mos_occ(:) = mos_occ(:)
277 sub_env%mos_active(:) = mos_active(:)
279 IF (dft_control%do_admm)
THEN
281 sub_env%admm_A => admm_env%A
287 sub_env%is_mgrid = sub_env%is_split .OR. tddfpt_control%mgrid_is_explicit
289 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
290 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
291 NULLIFY (sub_env%task_list_orb, sub_env%task_list_aux_fit)
292 NULLIFY (sub_env%task_list_orb_soft, sub_env%task_list_aux_fit_soft)
294 IF (sub_env%is_mgrid)
THEN
295 IF (tddfpt_control%mgrid_is_explicit) &
296 CALL init_tddfpt_mgrid(qs_control, tddfpt_control, mgrid_saved)
298 NULLIFY (sub_env%pw_env)
303 CALL tddfpt_build_distribution_2d(distribution_2d=sub_env%dist_2d, dbcsr_dist=sub_env%dbcsr_dist, &
304 blacs_env=sub_env%blacs_env, qs_env=qs_env)
306 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_orb, sab=sub_env%sab_orb, basis_type=
"ORB", &
307 distribution_2d=sub_env%dist_2d, pw_env=sub_env%pw_env, qs_env=qs_env, &
308 skip_load_balance=qs_control%skip_load_balance_distributed, &
309 reorder_grid_ranks=.true.)
311 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
312 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_orb_soft, sab=sub_env%sab_orb, basis_type=
"ORB_SOFT", &
313 distribution_2d=sub_env%dist_2d, pw_env=sub_env%pw_env, qs_env=qs_env, &
314 skip_load_balance=qs_control%skip_load_balance_distributed, &
315 reorder_grid_ranks=.true.)
318 IF (dft_control%do_admm)
THEN
319 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_aux_fit, sab=sub_env%sab_aux_fit, &
320 basis_type=
"AUX_FIT", distribution_2d=sub_env%dist_2d, &
321 pw_env=sub_env%pw_env, qs_env=qs_env, &
322 skip_load_balance=qs_control%skip_load_balance_distributed, &
323 reorder_grid_ranks=.false.)
324 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
325 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_aux_fit_soft, sab=sub_env%sab_aux_fit, &
326 basis_type=
"AUX_FIT_SOFT", distribution_2d=sub_env%dist_2d, &
327 pw_env=sub_env%pw_env, qs_env=qs_env, &
328 skip_load_balance=qs_control%skip_load_balance_distributed, &
329 reorder_grid_ranks=.false.)
333 IF (tddfpt_control%mgrid_is_explicit) &
334 CALL restore_qs_mgrid(qs_control, mgrid_saved)
337 sub_env%pw_env => pw_env_global
339 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, &
340 sab_orb=sub_env%sab_orb, task_list=sub_env%task_list_orb)
341 IF (dft_control%do_admm)
THEN
342 CALL get_admm_env(admm_env, sab_aux_fit=sub_env%sab_aux_fit, &
343 task_list_aux_fit=sub_env%task_list_aux_fit)
344 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
345 sub_env%task_list_aux_fit_soft => admm_env%admm_gapw_env%task_list
348 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
349 CALL get_qs_env(qs_env, task_list_soft=sub_env%task_list_orb_soft)
354 IF (dft_control%qs_control%gapw)
THEN
356 atomic_kind_set=atomic_kind_set, &
358 qs_kind_set=qs_kind_set)
362 qs_kind_set, dft_control, sub_env%para_env)
364 CALL init_rho0(sub_env%local_rho_set, qs_env, dft_control%qs_control%gapw_control, &
369 ELSEIF (dft_control%qs_control%gapw_xc)
THEN
371 atomic_kind_set=atomic_kind_set, &
372 qs_kind_set=qs_kind_set)
375 qs_kind_set, dft_control, sub_env%para_env)
379 IF (dft_control%do_admm)
THEN
380 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
381 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
384 admm_env%admm_gapw_env%admm_kind_set, &
385 dft_control, sub_env%para_env)
390 sub_env%is_mgrid = .false.
391 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
392 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
393 NULLIFY (sub_env%task_list_orb, sub_env%task_list_orb_soft)
394 NULLIFY (sub_env%task_list_aux_fit, sub_env%task_list_aux_fit_soft)
395 NULLIFY (sub_env%pw_env)
396 IF (sub_env%is_split)
THEN
397 cpabort(
'Subsys option not available')
399 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb)
402 sub_env%is_mgrid = .false.
403 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
404 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
405 NULLIFY (sub_env%task_list_orb, sub_env%task_list_orb_soft)
406 NULLIFY (sub_env%task_list_aux_fit, sub_env%task_list_aux_fit_soft)
407 NULLIFY (sub_env%pw_env)
408 IF (sub_env%is_split)
THEN
409 cpabort(
'Subsys option not available')
411 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb)
414 cpabort(
"Unknown kernel type")
417 CALL timestop(handle)
430 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_sub_env_release'
434 CALL timeset(routinen, handle)
436 IF (sub_env%is_mgrid)
THEN
437 IF (
ASSOCIATED(sub_env%task_list_aux_fit)) &
440 IF (
ASSOCIATED(sub_env%task_list_aux_fit_soft)) &
443 IF (
ASSOCIATED(sub_env%task_list_orb)) &
446 IF (
ASSOCIATED(sub_env%task_list_orb_soft)) &
452 IF (
ASSOCIATED(sub_env%dbcsr_dist))
THEN
454 DEALLOCATE (sub_env%dbcsr_dist)
457 IF (
ASSOCIATED(sub_env%dist_2d)) &
462 IF (
ASSOCIATED(sub_env%local_rho_set))
THEN
465 IF (
ASSOCIATED(sub_env%hartree_local))
THEN
468 IF (
ASSOCIATED(sub_env%local_rho_set_admm))
THEN
479 sub_env%is_mgrid = .false.
481 IF (sub_env%is_split .AND.
ASSOCIATED(sub_env%admm_A))
THEN
483 DEALLOCATE (sub_env%admm_A)
484 NULLIFY (sub_env%admm_A)
487 IF (sub_env%is_split)
THEN
488 DO i =
SIZE(sub_env%mos_occ), 1, -1
491 DO i =
SIZE(sub_env%mos_active), 1, -1
495 DEALLOCATE (sub_env%mos_occ)
496 DEALLOCATE (sub_env%mos_active)
501 IF (
ALLOCATED(sub_env%group_distribution)) &
502 DEALLOCATE (sub_env%group_distribution)
504 sub_env%is_split = .false.
506 CALL timestop(handle)
522 SUBROUTINE init_tddfpt_mgrid(qs_control, tddfpt_control, mgrid_saved)
525 TYPE(mgrid_saved_parameters),
INTENT(out) :: mgrid_saved
527 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_tddfpt_mgrid'
529 INTEGER :: handle, igrid, ngrids
531 CALL timeset(routinen, handle)
534 mgrid_saved%commensurate_mgrids = qs_control%commensurate_mgrids
535 mgrid_saved%realspace_mgrids = qs_control%realspace_mgrids
536 mgrid_saved%skip_load_balance = qs_control%skip_load_balance_distributed
537 mgrid_saved%cutoff = qs_control%cutoff
538 mgrid_saved%progression_factor = qs_control%progression_factor
539 mgrid_saved%relative_cutoff = qs_control%relative_cutoff
540 mgrid_saved%e_cutoff => qs_control%e_cutoff
543 qs_control%commensurate_mgrids = tddfpt_control%mgrid_commensurate_mgrids
544 qs_control%realspace_mgrids = tddfpt_control%mgrid_realspace_mgrids
545 qs_control%skip_load_balance_distributed = tddfpt_control%mgrid_skip_load_balance
546 qs_control%cutoff = tddfpt_control%mgrid_cutoff
547 qs_control%progression_factor = tddfpt_control%mgrid_progression_factor
548 qs_control%relative_cutoff = tddfpt_control%mgrid_relative_cutoff
550 ALLOCATE (qs_control%e_cutoff(tddfpt_control%mgrid_ngrids))
551 ngrids = tddfpt_control%mgrid_ngrids
552 IF (
ASSOCIATED(tddfpt_control%mgrid_e_cutoff))
THEN
555 qs_control%e_cutoff(igrid) = tddfpt_control%mgrid_e_cutoff(igrid)*0.5_dp
559 DO igrid = ngrids, 1, -1
560 IF (qs_control%cutoff <= qs_control%e_cutoff(igrid))
THEN
561 qs_control%cutoff = qs_control%e_cutoff(igrid)
568 qs_control%cutoff = qs_control%e_cutoff(1)
570 qs_control%e_cutoff(1) = qs_control%cutoff
572 qs_control%e_cutoff(igrid) = qs_control%e_cutoff(igrid - 1)/qs_control%progression_factor
576 CALL timestop(handle)
577 END SUBROUTINE init_tddfpt_mgrid
586 SUBROUTINE restore_qs_mgrid(qs_control, mgrid_saved)
588 TYPE(mgrid_saved_parameters),
INTENT(in) :: mgrid_saved
590 CHARACTER(LEN=*),
PARAMETER :: routinen =
'restore_qs_mgrid'
594 CALL timeset(routinen, handle)
596 IF (
ASSOCIATED(qs_control%e_cutoff)) &
597 DEALLOCATE (qs_control%e_cutoff)
599 qs_control%commensurate_mgrids = mgrid_saved%commensurate_mgrids
600 qs_control%realspace_mgrids = mgrid_saved%realspace_mgrids
601 qs_control%skip_load_balance_distributed = mgrid_saved%skip_load_balance
602 qs_control%cutoff = mgrid_saved%cutoff
603 qs_control%progression_factor = mgrid_saved%progression_factor
604 qs_control%relative_cutoff = mgrid_saved%relative_cutoff
605 qs_control%e_cutoff => mgrid_saved%e_cutoff
607 CALL timestop(handle)
608 END SUBROUTINE restore_qs_mgrid
621 SUBROUTINE tddfpt_build_distribution_2d(distribution_2d, dbcsr_dist, blacs_env, qs_env)
627 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_build_distribution_2d'
635 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
638 CALL timeset(routinen, handle)
640 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, cell=cell, input=input, &
641 molecule_kind_set=molecule_kind_set, molecule_set=molecule_set, &
642 particle_set=particle_set, qs_kind_set=qs_kind_set)
644 NULLIFY (distribution_2d)
646 atomic_kind_set=atomic_kind_set, &
647 particle_set=particle_set, &
648 qs_kind_set=qs_kind_set, &
649 molecule_kind_set=molecule_kind_set, &
650 molecule_set=molecule_set, &
651 distribution_2d=distribution_2d, &
652 blacs_env=blacs_env, &
653 force_env_section=input)
655 ALLOCATE (dbcsr_dist)
658 CALL timestop(handle)
659 END SUBROUTINE tddfpt_build_distribution_2d
676 SUBROUTINE tddfpt_build_tasklist(task_list, sab, basis_type, distribution_2d, pw_env, qs_env, &
677 skip_load_balance, reorder_grid_ranks)
681 CHARACTER(len=*),
INTENT(in) :: basis_type
685 LOGICAL,
INTENT(in) :: skip_load_balance, reorder_grid_ranks
687 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_build_tasklist'
689 INTEGER :: handle, ikind, nkinds
690 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: orb_present
691 REAL(kind=
dp) :: subcells
692 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: orb_radius
693 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radius
701 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
705 CALL timeset(routinen, handle)
707 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, cell=cell, input=input, &
708 ks_env=ks_env, local_particles=local_particles, molecule_set=molecule_set, &
709 particle_set=particle_set, qs_kind_set=qs_kind_set)
711 nkinds =
SIZE(atomic_kind_set)
713 IF (.NOT. (
ASSOCIATED(sab)))
THEN
714 ALLOCATE (atom2d(nkinds))
715 CALL atom2d_build(atom2d, local_particles, distribution_2d, atomic_kind_set, &
716 molecule_set, molecule_only=.false., particle_set=particle_set)
718 ALLOCATE (orb_present(nkinds))
719 ALLOCATE (orb_radius(nkinds))
720 ALLOCATE (pair_radius(nkinds, nkinds))
723 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
724 IF (
ASSOCIATED(orb_basis_set))
THEN
725 orb_present(ikind) = .true.
726 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, kind_radius=orb_radius(ikind))
728 orb_present(ikind) = .false.
729 orb_radius(ikind) = 0.0_dp
733 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
738 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb")
741 DEALLOCATE (atom2d, orb_present, orb_radius, pair_radius)
746 reorder_rs_grid_ranks=reorder_grid_ranks, &
747 skip_load_balance_distributed=skip_load_balance, &
748 pw_env_external=pw_env, sab_orb_external=sab)
750 CALL timestop(handle)
751 END SUBROUTINE tddfpt_build_tasklist
770 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_dbcsr_create_by_dist'
772 CHARACTER :: matrix_type
773 CHARACTER(len=default_string_length) :: matrix_name
775 INTEGER,
DIMENSION(:),
POINTER :: col_blk_sizes, row_blk_sizes
777 CALL timeset(routinen, handle)
779 cpassert(
ASSOCIATED(template))
780 CALL dbcsr_get_info(template, row_blk_size=row_blk_sizes, col_blk_size=col_blk_sizes, &
781 name=matrix_name, matrix_type=matrix_type)
783 IF (
ASSOCIATED(matrix))
THEN
789 CALL dbcsr_create(matrix, matrix_name, dbcsr_dist, matrix_type, row_blk_sizes, col_blk_sizes)
792 CALL timestop(handle)
818 TYPE(
cp_fm_type),
INTENT(IN) :: fm_src, fm_dest_sub
821 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_fm_replicate_across_subgroups'
823 INTEGER :: handle, igroup, igroup_local, ncols_global_dest, ncols_global_src, ngroups, &
824 nrows_global_dest, nrows_global_src
829 IF (sub_env%is_split)
THEN
830 CALL timeset(routinen, handle)
832 CALL cp_fm_get_info(fm_src, nrow_global=nrows_global_src, ncol_global=ncols_global_src, &
833 context=blacs_env_global, para_env=para_env_global)
834 CALL cp_fm_get_info(fm_dest_sub, nrow_global=nrows_global_dest, ncol_global=ncols_global_dest)
836 IF (debug_this_module)
THEN
837 cpassert(nrows_global_src == nrows_global_dest)
838 cpassert(ncols_global_src == ncols_global_dest)
841 igroup_local = sub_env%group_distribution(para_env_global%mepos)
842 ngroups = sub_env%ngroups
844 DO igroup = 0, ngroups - 1
845 IF (igroup == igroup_local)
THEN
852 CALL timestop(handle)
Types and set/get functions for auxiliary density matrix methods.
subroutine, public get_admm_env(admm_env, mo_derivs_aux_fit, mos_aux_fit, sab_aux_fit, sab_aux_fit_asymm, sab_aux_fit_vs_orb, matrix_s_aux_fit, matrix_s_aux_fit_kp, matrix_s_aux_fit_vs_orb, matrix_s_aux_fit_vs_orb_kp, task_list_aux_fit, matrix_ks_aux_fit, matrix_ks_aux_fit_kp, matrix_ks_aux_fit_im, matrix_ks_aux_fit_dft, matrix_ks_aux_fit_hfx, matrix_ks_aux_fit_dft_kp, matrix_ks_aux_fit_hfx_kp, rho_aux_fit, rho_aux_fit_buffer, admm_dm)
Get routine for the ADMM env.
Define the atomic kind types and their sub types.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum)
...
Handles all functions related to the CELL.
methods related to the blacs parallel environment
subroutine, public cp_blacs_env_release(blacs_env)
releases the given blacs_env
subroutine, public cp_blacs_env_create(blacs_env, para_env, blacs_grid_layout, blacs_repeatable, row_major, grid_2d)
allocates and initializes a type that represent a blacs context
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_distribution_release(dist)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_release(matrix)
...
Routines that link DBCSR and CP2K concepts together.
subroutine, public cp_dbcsr_alloc_block_from_nbl(matrix, sab_orb, desymmetrize)
allocate the blocks of a dbcsr based on the neighbor list
DBCSR operations in CP2K.
subroutine, public cp_dbcsr_dist2d_to_dist(dist2d, dist)
Creates a DBCSR distribution from a distribution_2d.
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_copy_general(source, destination, para_env)
General copy of a fm matrix to another fm matrix. Uses non-blocking MPI rather than ScaLAPACK.
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp, nrow, ncol, set_zero)
creates a new full matrix with the given structure
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
stores a mapping of 2D info (e.g. matrix) on a 2D processor distribution (i.e. blacs grid) where cpus...
subroutine, public distribution_2d_release(distribution_2d)
...
Distribution methods for atoms, particles, or molecules.
subroutine, public distribute_molecules_2d(cell, atomic_kind_set, particle_set, qs_kind_set, molecule_kind_set, molecule_set, distribution_2d, blacs_env, force_env_section)
Distributes the particle pairs creating a 2d distribution optimally suited for quickstep.
subroutine, public init_coulomb_local(hartree_local, natom)
...
subroutine, public hartree_local_release(hartree_local)
...
subroutine, public hartree_local_create(hartree_local)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
Define the molecule kind structure types and the corresponding functionality.
Define the data structure for the molecule information.
Define the data structure for the particle information.
methods of pw_env that have dependence on qs_env
subroutine, public pw_env_rebuild(pw_env, qs_env, external_para_env)
rebuilds the pw_env data (necessary if cell or cutoffs change)
subroutine, public pw_env_create(pw_env)
creates a pw_env, if qs_env is given calls pw_env_rebuild
container for various plainwaves related things
subroutine, public pw_env_retain(pw_env)
retains the pw_env (see doc/ReferenceCounting.html)
subroutine, public pw_env_release(pw_env, para_env)
releases the given pw_env (see doc/ReferenceCounting.html)
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, 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, 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, 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.
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, 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, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public local_rho_set_create(local_rho_set)
...
subroutine, public local_rho_set_release(local_rho_set)
...
Define the neighbor list data types and the corresponding functionality.
subroutine, public release_neighbor_list_sets(nlists)
releases an array of neighbor_list_sets
Generate the atomic neighbor lists.
subroutine, public atom2d_cleanup(atom2d)
free the internals of atom2d
subroutine, public pair_radius_setup(present_a, present_b, radius_a, radius_b, pair_radius, prmin)
...
subroutine, public build_neighbor_lists(ab_list, particle_set, atom, cell, pair_radius, subcells, mic, symmetric, molecular, subset_of_mol, current_subset, operator_type, nlname, atomb_to_keep)
Build simple pair neighbor lists.
subroutine, public atom2d_build(atom2d, distribution_1d, distribution_2d, atomic_kind_set, molecule_set, molecule_only, particle_set)
Build some distribution structure of atoms, refactored from build_qs_neighbor_lists.
subroutine, public rho0_s_grid_create(pw_env, rho0_mpole)
...
subroutine, public init_rho0(local_rho_set, qs_env, gapw_control, zcore)
...
subroutine, public allocate_rho_atom_internals(rho_atom_set, atomic_kind_set, qs_kind_set, dft_control, para_env)
...
subroutine, public tddfpt_sub_env_init(sub_env, qs_env, mos_occ, mos_active, kernel)
Split MPI communicator to create a set of parallel (sub)groups.
subroutine, public tddfpt_sub_env_release(sub_env)
Release parallel group environment.
subroutine, public tddfpt_fm_replicate_across_subgroups(fm_src, fm_dest_sub, sub_env)
Replicate a globally distributed matrix across all sub-groups. At the end every sub-group will hold a...
subroutine, public tddfpt_dbcsr_create_by_dist(matrix, template, dbcsr_dist, sab)
Create a DBCSR matrix based on a template matrix, distribution object, and the list of neighbours.
generate the tasks lists used by collocate and integrate routines
subroutine, public generate_qs_task_list(ks_env, task_list, basis_type, reorder_rs_grid_ranks, skip_load_balance_distributed, pw_env_external, sab_orb_external)
...
subroutine, public deallocate_task_list(task_list)
deallocates the components and the object itself
subroutine, public allocate_task_list(task_list)
allocates and initialised the components of the task_list_type
stores some data used in wavefunction fitting
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
keeps the information about the structure of a full matrix
structure to store local (to a processor) ordered lists of integers.
distributes pairs on a 2d grid of processors
stores all the informations relevant to an mpi environment
contained for different pw related things
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
Parallel (sub)group environment.