85#include "./base/base_uses.f90"
91 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_subgroups'
92 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .true.
107 LOGICAL :: is_split = .false.
109 INTEGER :: ngroups = -1
112 INTEGER,
DIMENSION(:),
ALLOCATABLE :: group_distribution
126 LOGICAL :: is_mgrid = .false.
137 DIMENSION(:),
POINTER :: sab_aux_fit => null(), sab_orb => null()
139 TYPE(
task_list_type),
POINTER :: task_list_aux_fit => null(), task_list_orb => null()
141 TYPE(
task_list_type),
POINTER :: task_list_aux_fit_soft => null(), task_list_orb_soft => null()
154 TYPE mgrid_saved_parameters
156 LOGICAL :: commensurate_mgrids = .false.
158 LOGICAL :: realspace_mgrids = .false.
160 LOGICAL :: skip_load_balance = .false.
162 REAL(kind=
dp) :: cutoff = 0.0_dp
164 REAL(kind=
dp) :: progression_factor = 0.0_dp
166 REAL(kind=
dp) :: relative_cutoff = 0.0_dp
168 REAL(kind=
dp),
DIMENSION(:),
POINTER :: e_cutoff => null()
169 END TYPE mgrid_saved_parameters
187 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(in) :: mos_occ, mos_active
188 INTEGER,
INTENT(in) :: kernel
190 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_sub_env_init'
192 INTEGER :: handle, ispin, nao, nao_aux, natom, &
193 nmo_active, nmo_occ, nspins
199 TYPE(mgrid_saved_parameters) :: mgrid_saved
204 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
207 CALL timeset(routinen, handle)
209 nspins =
SIZE(mos_occ)
211 CALL get_qs_env(qs_env, blacs_env=blacs_env_global, dft_control=dft_control, &
212 para_env=para_env_global, pw_env=pw_env_global)
214 tddfpt_control => dft_control%tddfpt2_control
215 qs_control => dft_control%qs_control
221 sub_env%is_split = tddfpt_control%nprocs > 0 .AND. tddfpt_control%nprocs*2 <= para_env_global%num_pe
223 ALLOCATE (sub_env%mos_occ(nspins))
224 ALLOCATE (sub_env%mos_active(nspins))
225 NULLIFY (sub_env%admm_A)
227 CALL get_qs_env(qs_env, xcint_weights=weights)
228 sub_env%xcint_weights => weights
229 IF (sub_env%is_split .AND.
ASSOCIATED(weights))
THEN
230 cpabort(
'subgroups and integration weights not compatible')
233 IF (sub_env%is_split)
THEN
234 ALLOCATE (sub_env%group_distribution(0:para_env_global%num_pe - 1))
236 ALLOCATE (sub_env%para_env)
237 CALL sub_env%para_env%from_split(comm=para_env_global, ngroups=sub_env%ngroups, &
238 group_distribution=sub_env%group_distribution, subgroup_min_size=tddfpt_control%nprocs)
241 NULLIFY (sub_env%blacs_env)
253 CALL cp_fm_get_info(mos_occ(ispin), nrow_global=nao, ncol_global=nmo_occ)
254 CALL cp_fm_struct_create(fm_struct, nrow_global=nao, ncol_global=nmo_occ, context=sub_env%blacs_env)
258 fm_dest_sub=sub_env%mos_occ(ispin), sub_env=sub_env)
262 CALL cp_fm_get_info(mos_active(ispin), nrow_global=nao, ncol_global=nmo_active)
263 CALL cp_fm_struct_create(fm_struct, nrow_global=nao, ncol_global=nmo_active, context=sub_env%blacs_env)
267 fm_dest_sub=sub_env%mos_active(ispin), sub_env=sub_env)
270 IF (dft_control%do_admm)
THEN
272 CALL cp_fm_get_info(admm_env%A, nrow_global=nao_aux, ncol_global=nao)
273 CALL cp_fm_struct_create(fm_struct, nrow_global=nao_aux, ncol_global=nao, context=sub_env%blacs_env)
274 ALLOCATE (sub_env%admm_A)
280 CALL para_env_global%retain()
281 sub_env%para_env => para_env_global
283 CALL blacs_env_global%retain()
284 sub_env%blacs_env => blacs_env_global
286 sub_env%mos_occ(:) = mos_occ(:)
287 sub_env%mos_active(:) = mos_active(:)
289 IF (dft_control%do_admm)
THEN
291 sub_env%admm_A => admm_env%A
297 sub_env%is_mgrid = sub_env%is_split .OR. tddfpt_control%mgrid_is_explicit
299 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
300 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
301 NULLIFY (sub_env%task_list_orb, sub_env%task_list_aux_fit)
302 NULLIFY (sub_env%task_list_orb_soft, sub_env%task_list_aux_fit_soft)
304 IF (sub_env%is_mgrid)
THEN
305 IF (tddfpt_control%mgrid_is_explicit)
THEN
306 CALL init_tddfpt_mgrid(qs_control, tddfpt_control, mgrid_saved)
309 IF (
ASSOCIATED(weights))
THEN
310 cpabort(
'Redefining MGRID and integration weights not compatible')
313 NULLIFY (sub_env%pw_env)
318 CALL tddfpt_build_distribution_2d(distribution_2d=sub_env%dist_2d, dbcsr_dist=sub_env%dbcsr_dist, &
319 blacs_env=sub_env%blacs_env, qs_env=qs_env)
321 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_orb, sab=sub_env%sab_orb, basis_type=
"ORB", &
322 distribution_2d=sub_env%dist_2d, pw_env=sub_env%pw_env, qs_env=qs_env, &
323 skip_load_balance=qs_control%skip_load_balance_distributed, &
324 reorder_grid_ranks=.true.)
326 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
327 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_orb_soft, sab=sub_env%sab_orb, basis_type=
"ORB_SOFT", &
328 distribution_2d=sub_env%dist_2d, pw_env=sub_env%pw_env, qs_env=qs_env, &
329 skip_load_balance=qs_control%skip_load_balance_distributed, &
330 reorder_grid_ranks=.true.)
333 IF (dft_control%do_admm)
THEN
334 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_aux_fit, sab=sub_env%sab_aux_fit, &
335 basis_type=
"AUX_FIT", distribution_2d=sub_env%dist_2d, &
336 pw_env=sub_env%pw_env, qs_env=qs_env, &
337 skip_load_balance=qs_control%skip_load_balance_distributed, &
338 reorder_grid_ranks=.false.)
339 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
340 CALL tddfpt_build_tasklist(task_list=sub_env%task_list_aux_fit_soft, sab=sub_env%sab_aux_fit, &
341 basis_type=
"AUX_FIT_SOFT", distribution_2d=sub_env%dist_2d, &
342 pw_env=sub_env%pw_env, qs_env=qs_env, &
343 skip_load_balance=qs_control%skip_load_balance_distributed, &
344 reorder_grid_ranks=.false.)
348 IF (tddfpt_control%mgrid_is_explicit)
THEN
349 CALL restore_qs_mgrid(qs_control, mgrid_saved)
353 sub_env%pw_env => pw_env_global
355 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, &
356 sab_orb=sub_env%sab_orb, task_list=sub_env%task_list_orb)
357 IF (dft_control%do_admm)
THEN
358 CALL get_admm_env(admm_env, sab_aux_fit=sub_env%sab_aux_fit, &
359 task_list_aux_fit=sub_env%task_list_aux_fit)
360 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
361 sub_env%task_list_aux_fit_soft => admm_env%admm_gapw_env%task_list
364 IF (qs_control%gapw .OR. qs_control%gapw_xc)
THEN
365 CALL get_qs_env(qs_env, task_list_soft=sub_env%task_list_orb_soft)
370 IF (dft_control%qs_control%gapw)
THEN
372 atomic_kind_set=atomic_kind_set, &
374 qs_kind_set=qs_kind_set)
378 qs_kind_set, dft_control, sub_env%para_env)
380 CALL init_rho0(sub_env%local_rho_set, qs_env, dft_control%qs_control%gapw_control, &
385 ELSE IF (dft_control%qs_control%gapw_xc)
THEN
387 atomic_kind_set=atomic_kind_set, &
388 qs_kind_set=qs_kind_set)
391 qs_kind_set, dft_control, sub_env%para_env)
395 IF (dft_control%do_admm)
THEN
396 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc)
THEN
397 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
400 admm_env%admm_gapw_env%admm_kind_set, &
401 dft_control, sub_env%para_env)
406 sub_env%is_mgrid = .false.
407 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
408 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
409 NULLIFY (sub_env%task_list_orb, sub_env%task_list_orb_soft)
410 NULLIFY (sub_env%task_list_aux_fit, sub_env%task_list_aux_fit_soft)
411 NULLIFY (sub_env%pw_env)
412 IF (sub_env%is_split)
THEN
413 cpabort(
'Subsys option not available')
415 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb)
418 sub_env%is_mgrid = .false.
419 NULLIFY (sub_env%dbcsr_dist, sub_env%dist_2d)
420 NULLIFY (sub_env%sab_orb, sub_env%sab_aux_fit)
421 NULLIFY (sub_env%task_list_orb, sub_env%task_list_orb_soft)
422 NULLIFY (sub_env%task_list_aux_fit, sub_env%task_list_aux_fit_soft)
423 NULLIFY (sub_env%pw_env)
424 IF (sub_env%is_split)
THEN
425 cpabort(
'Subsys option not available')
427 CALL get_qs_env(qs_env, dbcsr_dist=sub_env%dbcsr_dist, sab_orb=sub_env%sab_orb)
430 cpabort(
"Unknown kernel type")
433 CALL timestop(handle)
446 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_sub_env_release'
450 CALL timeset(routinen, handle)
452 IF (sub_env%is_mgrid)
THEN
453 IF (
ASSOCIATED(sub_env%task_list_aux_fit))
THEN
457 IF (
ASSOCIATED(sub_env%task_list_aux_fit_soft))
THEN
461 IF (
ASSOCIATED(sub_env%task_list_orb))
THEN
465 IF (
ASSOCIATED(sub_env%task_list_orb_soft))
THEN
472 IF (
ASSOCIATED(sub_env%dbcsr_dist))
THEN
474 DEALLOCATE (sub_env%dbcsr_dist)
477 IF (
ASSOCIATED(sub_env%dist_2d))
THEN
483 IF (
ASSOCIATED(sub_env%local_rho_set))
THEN
486 IF (
ASSOCIATED(sub_env%hartree_local))
THEN
489 IF (
ASSOCIATED(sub_env%local_rho_set_admm))
THEN
500 sub_env%is_mgrid = .false.
502 IF (sub_env%is_split .AND.
ASSOCIATED(sub_env%admm_A))
THEN
504 DEALLOCATE (sub_env%admm_A)
505 NULLIFY (sub_env%admm_A)
508 IF (sub_env%is_split)
THEN
509 DO i =
SIZE(sub_env%mos_occ), 1, -1
512 DO i =
SIZE(sub_env%mos_active), 1, -1
516 DEALLOCATE (sub_env%mos_occ)
517 DEALLOCATE (sub_env%mos_active)
522 IF (
ALLOCATED(sub_env%group_distribution))
THEN
523 DEALLOCATE (sub_env%group_distribution)
526 sub_env%is_split = .false.
528 CALL timestop(handle)
544 SUBROUTINE init_tddfpt_mgrid(qs_control, tddfpt_control, mgrid_saved)
547 TYPE(mgrid_saved_parameters),
INTENT(out) :: mgrid_saved
549 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_tddfpt_mgrid'
551 INTEGER :: handle, igrid, ngrids
553 CALL timeset(routinen, handle)
556 mgrid_saved%commensurate_mgrids = qs_control%commensurate_mgrids
557 mgrid_saved%realspace_mgrids = qs_control%realspace_mgrids
558 mgrid_saved%skip_load_balance = qs_control%skip_load_balance_distributed
559 mgrid_saved%cutoff = qs_control%cutoff
560 mgrid_saved%progression_factor = qs_control%progression_factor
561 mgrid_saved%relative_cutoff = qs_control%relative_cutoff
562 mgrid_saved%e_cutoff => qs_control%e_cutoff
565 qs_control%commensurate_mgrids = tddfpt_control%mgrid_commensurate_mgrids
566 qs_control%realspace_mgrids = tddfpt_control%mgrid_realspace_mgrids
567 qs_control%skip_load_balance_distributed = tddfpt_control%mgrid_skip_load_balance
568 qs_control%cutoff = tddfpt_control%mgrid_cutoff
569 qs_control%progression_factor = tddfpt_control%mgrid_progression_factor
570 qs_control%relative_cutoff = tddfpt_control%mgrid_relative_cutoff
572 ALLOCATE (qs_control%e_cutoff(tddfpt_control%mgrid_ngrids))
573 ngrids = tddfpt_control%mgrid_ngrids
574 IF (
ASSOCIATED(tddfpt_control%mgrid_e_cutoff))
THEN
577 qs_control%e_cutoff(igrid) = tddfpt_control%mgrid_e_cutoff(igrid)*0.5_dp
581 DO igrid = ngrids, 1, -1
582 IF (qs_control%cutoff <= qs_control%e_cutoff(igrid))
THEN
583 qs_control%cutoff = qs_control%e_cutoff(igrid)
590 qs_control%cutoff = qs_control%e_cutoff(1)
593 qs_control%e_cutoff(1) = qs_control%cutoff
595 qs_control%e_cutoff(igrid) = qs_control%e_cutoff(igrid - 1)/qs_control%progression_factor
599 CALL timestop(handle)
600 END SUBROUTINE init_tddfpt_mgrid
609 SUBROUTINE restore_qs_mgrid(qs_control, mgrid_saved)
611 TYPE(mgrid_saved_parameters),
INTENT(in) :: mgrid_saved
613 CHARACTER(LEN=*),
PARAMETER :: routinen =
'restore_qs_mgrid'
617 CALL timeset(routinen, handle)
619 IF (
ASSOCIATED(qs_control%e_cutoff))
THEN
620 DEALLOCATE (qs_control%e_cutoff)
623 qs_control%commensurate_mgrids = mgrid_saved%commensurate_mgrids
624 qs_control%realspace_mgrids = mgrid_saved%realspace_mgrids
625 qs_control%skip_load_balance_distributed = mgrid_saved%skip_load_balance
626 qs_control%cutoff = mgrid_saved%cutoff
627 qs_control%progression_factor = mgrid_saved%progression_factor
628 qs_control%relative_cutoff = mgrid_saved%relative_cutoff
629 qs_control%e_cutoff => mgrid_saved%e_cutoff
631 CALL timestop(handle)
632 END SUBROUTINE restore_qs_mgrid
645 SUBROUTINE tddfpt_build_distribution_2d(distribution_2d, dbcsr_dist, blacs_env, qs_env)
651 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_build_distribution_2d'
659 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
662 CALL timeset(routinen, handle)
664 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, cell=cell, input=input, &
665 molecule_kind_set=molecule_kind_set, molecule_set=molecule_set, &
666 particle_set=particle_set, qs_kind_set=qs_kind_set)
668 NULLIFY (distribution_2d)
670 atomic_kind_set=atomic_kind_set, &
671 particle_set=particle_set, &
672 qs_kind_set=qs_kind_set, &
673 molecule_kind_set=molecule_kind_set, &
674 molecule_set=molecule_set, &
675 distribution_2d=distribution_2d, &
676 blacs_env=blacs_env, &
677 force_env_section=input)
679 ALLOCATE (dbcsr_dist)
682 CALL timestop(handle)
683 END SUBROUTINE tddfpt_build_distribution_2d
700 SUBROUTINE tddfpt_build_tasklist(task_list, sab, basis_type, distribution_2d, pw_env, qs_env, &
701 skip_load_balance, reorder_grid_ranks)
705 CHARACTER(len=*),
INTENT(in) :: basis_type
709 LOGICAL,
INTENT(in) :: skip_load_balance, reorder_grid_ranks
711 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_build_tasklist'
713 INTEGER :: handle, ikind, nkinds
714 LOGICAL,
ALLOCATABLE,
DIMENSION(:) :: orb_present
715 REAL(kind=
dp) :: subcells
716 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: orb_radius
717 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radius
725 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
729 CALL timeset(routinen, handle)
731 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, cell=cell, input=input, &
732 ks_env=ks_env, local_particles=local_particles, molecule_set=molecule_set, &
733 particle_set=particle_set, qs_kind_set=qs_kind_set)
735 nkinds =
SIZE(atomic_kind_set)
737 IF (.NOT. (
ASSOCIATED(sab)))
THEN
738 ALLOCATE (atom2d(nkinds))
739 CALL atom2d_build(atom2d, local_particles, distribution_2d, atomic_kind_set, &
740 molecule_set, molecule_only=.false., particle_set=particle_set)
742 ALLOCATE (orb_present(nkinds))
743 ALLOCATE (orb_radius(nkinds))
744 ALLOCATE (pair_radius(nkinds, nkinds))
747 CALL get_qs_kind(qs_kind_set(ikind), basis_set=orb_basis_set, basis_type=basis_type)
748 IF (
ASSOCIATED(orb_basis_set))
THEN
749 orb_present(ikind) = .true.
750 CALL get_gto_basis_set(gto_basis_set=orb_basis_set, kind_radius=orb_radius(ikind))
752 orb_present(ikind) = .false.
753 orb_radius(ikind) = 0.0_dp
757 CALL pair_radius_setup(orb_present, orb_present, orb_radius, orb_radius, pair_radius)
762 mic=.false., subcells=subcells, molecular=.false., nlname=
"sab_orb")
765 DEALLOCATE (atom2d, orb_present, orb_radius, pair_radius)
770 reorder_rs_grid_ranks=reorder_grid_ranks, &
771 skip_load_balance_distributed=skip_load_balance, &
772 pw_env_external=pw_env, sab_orb_external=sab)
774 CALL timestop(handle)
775 END SUBROUTINE tddfpt_build_tasklist
794 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_dbcsr_create_by_dist'
796 CHARACTER :: matrix_type
797 CHARACTER(len=default_string_length) :: matrix_name
799 INTEGER,
DIMENSION(:),
POINTER :: col_blk_sizes, row_blk_sizes
801 CALL timeset(routinen, handle)
803 cpassert(
ASSOCIATED(template))
804 CALL dbcsr_get_info(template, row_blk_size=row_blk_sizes, col_blk_size=col_blk_sizes, &
805 name=matrix_name, matrix_type=matrix_type)
807 IF (
ASSOCIATED(matrix))
THEN
813 CALL dbcsr_create(matrix, matrix_name, dbcsr_dist, matrix_type, row_blk_sizes, col_blk_sizes)
816 CALL timestop(handle)
842 TYPE(
cp_fm_type),
INTENT(IN) :: fm_src, fm_dest_sub
845 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_fm_replicate_across_subgroups'
847 INTEGER :: handle, igroup, igroup_local, ncols_global_dest, ncols_global_src, ngroups, &
848 nrows_global_dest, nrows_global_src
853 IF (sub_env%is_split)
THEN
854 CALL timeset(routinen, handle)
856 CALL cp_fm_get_info(fm_src, nrow_global=nrows_global_src, ncol_global=ncols_global_src, &
857 context=blacs_env_global, para_env=para_env_global)
858 CALL cp_fm_get_info(fm_dest_sub, nrow_global=nrows_global_dest, ncol_global=ncols_global_dest)
860 IF (debug_this_module)
THEN
861 cpassert(nrows_global_src == nrows_global_dest)
862 cpassert(ncols_global_src == ncols_global_dest)
865 igroup_local = sub_env%group_distribution(para_env_global%mepos)
866 ngroups = sub_env%ngroups
868 DO igroup = 0, ngroups - 1
869 IF (igroup == igroup_local)
THEN
876 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, ccon)
...
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, 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, 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.
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.
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, ext_kpoints)
...
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.