28 USE dbt_api,
ONLY: dbt_destroy,&
56#include "./base/base_uses.f90"
103 INTEGER :: define_excited = 0
104 INTEGER :: dipole_form = 0
105 INTEGER :: n_search = 0
106 INTEGER :: n_excited = 0
107 INTEGER :: ot_max_iter = 0
108 REAL(
dp) :: e_range = 0.0_dp
109 REAL(
dp) :: sx = 0.0_dp
110 REAL(
dp) :: eps_range = 0.0_dp
111 REAL(
dp) :: eps_screen = 0.0_dp
112 REAL(
dp) :: eps_pgf = 0.0_dp
113 REAL(
dp) :: eps_filter = 0.0_dp
114 REAL(
dp) :: ot_eps_iter = 0.0_dp
117 REAL(
dp) :: ri_radius = 0.0_dp
118 LOGICAL :: do_ot = .false.
119 LOGICAL :: do_hfx = .false.
120 LOGICAL :: do_xc = .false.
121 LOGICAL :: do_coulomb = .false.
122 LOGICAL :: do_ri_metric = .false.
123 LOGICAL :: check_only = .false.
124 LOGICAL :: tamm_dancoff = .false.
125 LOGICAL :: do_quad = .false.
126 LOGICAL :: xyz_dip = .false.
127 LOGICAL :: spin_dip = .false.
128 LOGICAL :: do_loc = .false.
129 LOGICAL :: do_uks = .false.
130 LOGICAL :: do_roks = .false.
131 LOGICAL :: do_soc = .false.
132 LOGICAL :: do_singlet = .false.
133 LOGICAL :: do_triplet = .false.
134 LOGICAL :: do_spin_cons = .false.
135 LOGICAL :: do_spin_flip = .false.
136 LOGICAL :: is_periodic = .false.
137 INTEGER,
DIMENSION(:),
POINTER :: list_ex_atoms => null()
138 CHARACTER(len=default_string_length), &
139 DIMENSION(:),
POINTER :: list_ex_kinds => null()
140 INTEGER,
DIMENSION(:, :),
POINTER :: state_types => null()
143 CHARACTER(len=default_string_length), &
144 DIMENSION(:, :),
POINTER :: grid_info => null()
147 LOGICAL :: do_gw2x = .false.
148 LOGICAL :: xps_only = .false.
149 REAL(
dp) :: gw2x_eps = 0.0_dp
150 LOGICAL :: pseudo_canonical = .false.
151 INTEGER :: max_gw2x_iter = 0
152 REAL(
dp) :: c_os = 0.0_dp
153 REAL(
dp) :: c_ss = 0.0_dp
154 INTEGER :: batch_size = 0
196 CHARACTER(len=2),
DIMENSION(3) :: state_type_char =
""
197 INTEGER :: nex_atoms = 0
198 INTEGER :: nex_kinds = 0
199 INTEGER,
DIMENSION(:),
POINTER :: ex_atom_indices => null()
200 INTEGER,
DIMENSION(:),
POINTER :: ex_kind_indices => null()
201 INTEGER,
DIMENSION(:, :),
POINTER :: state_types => null()
202 TYPE(dbt_type),
POINTER :: ri_3c_coul => null()
203 TYPE(dbt_type),
POINTER :: ri_3c_ex => null()
205 POINTER :: donor_states => null()
206 INTEGER,
DIMENSION(:, :, :),
POINTER :: mos_of_ex_atoms => null()
208 POINTER :: mo_coeff => null()
210 REAL(
dp),
DIMENSION(:, :),
POINTER :: ri_inv_coul => null()
211 REAL(
dp),
DIMENSION(:, :),
POINTER :: ri_inv_ex => null()
215 POINTER :: q_projector => null()
217 POINTER :: dipmat => null()
219 POINTER :: quadmat => null()
221 POINTER :: ri_fxc => null()
222 LOGICAL :: fxc_avail = .false.
224 POINTER :: orb_soc => null()
227 POINTER :: lumo_evecs => null()
230 POINTER :: lumo_evals => null()
232 POINTER :: ot_prec => null()
234 POINTER :: fock_matrix => null()
274 INTEGER :: at_index = 0
275 INTEGER :: kind_index = 0
276 INTEGER :: ndo_mo = 0
277 CHARACTER(LEN=default_string_length) :: at_symbol =
""
278 INTEGER :: state_type = 0
279 INTEGER,
DIMENSION(:),
POINTER :: blk_size => null()
280 REAL(
dp),
DIMENSION(:, :),
POINTER :: energy_evals => null()
281 REAL(
dp),
DIMENSION(:, :),
POINTER :: gw2x_evals => null()
282 INTEGER,
DIMENSION(:, :),
POINTER :: mo_indices => null()
288 REAL(
dp),
DIMENSION(:, :),
POINTER :: contract_coeffs => null()
289 REAL(
dp),
DIMENSION(:),
POINTER :: sc_evals => null()
290 REAL(
dp),
DIMENSION(:),
POINTER :: sf_evals => null()
291 REAL(
dp),
DIMENSION(:),
POINTER :: sg_evals => null()
292 REAL(
dp),
DIMENSION(:),
POINTER :: tp_evals => null()
293 REAL(
dp),
DIMENSION(:),
POINTER :: soc_evals => null()
294 REAL(
dp),
DIMENSION(:, :),
POINTER :: osc_str => null()
295 REAL(
dp),
DIMENSION(:, :),
POINTER :: alpha_osc => null()
296 REAL(
dp),
DIMENSION(:, :),
POINTER :: beta_osc => null()
297 REAL(
dp),
DIMENSION(:, :),
POINTER :: soc_osc_str => null()
298 REAL(
dp),
DIMENSION(:),
POINTER :: quad_osc_str => null()
299 REAL(
dp),
DIMENSION(:),
POINTER :: soc_quad_osc_str => null()
305 POINTER :: metric => null()
312 TYPE grid_atom_p_type
314 END TYPE grid_atom_p_type
316 TYPE harmonics_atom_p_type
318 END TYPE harmonics_atom_p_type
322 INTEGER :: batch_size = 0
323 INTEGER :: nbatch = 0
324 INTEGER :: ibatch = 0
326 INTEGER,
DIMENSION(:),
ALLOCATABLE :: nso_proc
327 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: so_bo
350 INTEGER :: nspins = 0
351 REAL(
dp) :: ri_radius = 0.0_dp
352 INTEGER,
DIMENSION(:),
POINTER :: excited_atoms => null()
353 INTEGER,
DIMENSION(:),
POINTER :: excited_kinds => null()
354 INTEGER,
DIMENSION(:),
POINTER :: proc_of_exat => null()
355 TYPE(grid_atom_p_type),
DIMENSION(:),
POINTER :: grid_atom_set => null()
356 TYPE(harmonics_atom_p_type),
DIMENSION(:), &
357 POINTER :: harmonics_atom_set => null()
362 TYPE(
cp_2d_r_p_type),
DIMENSION(:),
POINTER :: ga => null(), gr => null(), dgr1 => null(), dgr2 => null()
366 CHARACTER(len=*),
PARAMETER,
PRIVATE :: modulen =
'xas_tdp_types'
389 cpassert(.NOT.
ASSOCIATED(xas_tdp_control))
390 ALLOCATE (xas_tdp_control)
393 xas_tdp_control%n_search = -1
395 xas_tdp_control%do_hfx = .false.
396 xas_tdp_control%do_xc = .false.
397 xas_tdp_control%do_coulomb = .true.
398 xas_tdp_control%do_ri_metric = .false.
399 xas_tdp_control%sx = 1.0_dp
400 xas_tdp_control%eps_range = 1.0e-6_dp
401 xas_tdp_control%eps_screen = 1.0e-10_dp
402 xas_tdp_control%eps_pgf = -1.0_dp
403 xas_tdp_control%eps_filter = 1.0e-10_dp
404 xas_tdp_control%ri_radius = 0.0_dp
406 xas_tdp_control%x_potential%cutoff_radius = 0.0_dp
407 xas_tdp_control%x_potential%omega = 0.0_dp
408 xas_tdp_control%x_potential%filename =
" "
410 xas_tdp_control%ri_m_potential%cutoff_radius = 0.0_dp
411 xas_tdp_control%ri_m_potential%omega = 0.0_dp
412 xas_tdp_control%ri_m_potential%filename =
" "
413 xas_tdp_control%check_only = .false.
414 xas_tdp_control%tamm_dancoff = .false.
415 xas_tdp_control%do_ot = .true.
416 xas_tdp_control%do_quad = .false.
417 xas_tdp_control%xyz_dip = .false.
418 xas_tdp_control%spin_dip = .false.
419 xas_tdp_control%do_loc = .false.
420 xas_tdp_control%do_uks = .false.
421 xas_tdp_control%do_roks = .false.
422 xas_tdp_control%do_soc = .false.
423 xas_tdp_control%do_singlet = .false.
424 xas_tdp_control%do_triplet = .false.
425 xas_tdp_control%do_spin_cons = .false.
426 xas_tdp_control%do_spin_flip = .false.
427 xas_tdp_control%is_periodic = .false.
428 xas_tdp_control%n_excited = -1
429 xas_tdp_control%e_range = -1.0_dp
430 xas_tdp_control%ot_max_iter = 500
431 xas_tdp_control%ot_eps_iter = 1.0e-4_dp
432 xas_tdp_control%c_os = 1.0_dp
433 xas_tdp_control%c_ss = 1.0_dp
434 xas_tdp_control%batch_size = 64
435 xas_tdp_control%do_gw2x = .false.
436 xas_tdp_control%xps_only = .false.
437 NULLIFY (xas_tdp_control%state_types)
438 NULLIFY (xas_tdp_control%list_ex_atoms)
439 NULLIFY (xas_tdp_control%list_ex_kinds)
440 NULLIFY (xas_tdp_control%loc_subsection)
441 NULLIFY (xas_tdp_control%print_loc_subsection)
442 NULLIFY (xas_tdp_control%grid_info)
443 NULLIFY (xas_tdp_control%ot_settings)
455 IF (
ASSOCIATED(xas_tdp_control))
THEN
456 IF (
ASSOCIATED(xas_tdp_control%list_ex_atoms))
THEN
457 DEALLOCATE (xas_tdp_control%list_ex_atoms)
459 IF (
ASSOCIATED(xas_tdp_control%list_ex_kinds))
THEN
460 DEALLOCATE (xas_tdp_control%list_ex_kinds)
462 IF (
ASSOCIATED(xas_tdp_control%state_types))
THEN
463 DEALLOCATE (xas_tdp_control%state_types)
465 IF (
ASSOCIATED(xas_tdp_control%grid_info))
THEN
466 DEALLOCATE (xas_tdp_control%grid_info)
468 IF (
ASSOCIATED(xas_tdp_control%loc_subsection))
THEN
472 IF (
ASSOCIATED(xas_tdp_control%ot_settings))
THEN
473 DEALLOCATE (xas_tdp_control%ot_settings)
475 DEALLOCATE (xas_tdp_control)
490 CHARACTER(len=default_string_length), &
491 DIMENSION(:),
POINTER :: k_list
492 INTEGER :: excitation, irep, nexc, nrep, ot_method, &
494 INTEGER,
DIMENSION(:),
POINTER :: a_list, t_list
496 NULLIFY (k_list, a_list, t_list)
501 l_val=xas_tdp_control%check_only)
504 l_val=xas_tdp_control%tamm_dancoff)
507 l_val=xas_tdp_control%do_soc)
518 IF (nrep > 0)
CALL section_vals_val_get(xas_tdp_section,
"EPS_PGF_XAS", r_val=xas_tdp_control%eps_pgf)
524 IF (.NOT.
ASSOCIATED(xas_tdp_control%grid_info))
THEN
525 ALLOCATE (xas_tdp_control%grid_info(nrep, 3))
528 IF (
SIZE(k_list) .NE. 3) cpabort(
"The GRID keyword needs three values")
529 xas_tdp_control%grid_info(irep, :) = k_list
536 IF (excitation ==
tddfpt_singlet) xas_tdp_control%do_singlet = .true.
537 IF (excitation ==
tddfpt_triplet) xas_tdp_control%do_triplet = .true.
543 i_val=xas_tdp_control%n_excited)
545 r_val=xas_tdp_control%e_range)
547 xas_tdp_control%e_range = xas_tdp_control%e_range/
evolt
552 i_val=xas_tdp_control%define_excited)
554 IF (.NOT.
ASSOCIATED(xas_tdp_control%list_ex_kinds))
THEN
557 ALLOCATE (xas_tdp_control%list_ex_kinds(0))
563 IF (
ASSOCIATED(k_list))
THEN
565 ALLOCATE (xas_tdp_control%list_ex_kinds(nexc))
566 xas_tdp_control%list_ex_kinds = k_list
572 IF (.NOT.
ASSOCIATED(xas_tdp_control%list_ex_atoms))
THEN
575 ALLOCATE (xas_tdp_control%list_ex_atoms(0))
581 IF (
ASSOCIATED(a_list))
THEN
583 CALL reallocate(xas_tdp_control%list_ex_atoms, 1, nexc)
584 xas_tdp_control%list_ex_atoms = a_list
592 IF (.NOT.
ASSOCIATED(xas_tdp_control%state_types))
THEN
593 ALLOCATE (xas_tdp_control%state_types(nrep, nexc))
595 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%STATE_TYPES", i_rep_val=irep, i_vals=t_list)
596 IF (
SIZE(t_list) .NE. nexc)
THEN
597 cpabort(
"The STATE_TYPES keywords do not have the correct number of entries.")
599 xas_tdp_control%state_types(irep, :) = t_list
602 IF (all(xas_tdp_control%state_types == 0)) cpabort(
"Please specify STATE_TYPES")
604 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%N_SEARCH", i_val=xas_tdp_control%n_search)
606 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%LOCALIZE", l_val=xas_tdp_control%do_loc)
611 xas_tdp_control%do_xc = xc_param .NE.
xc_none
613 l_val=xas_tdp_control%do_hfx)
616 xas_tdp_control%ri_radius =
bohr*xas_tdp_control%ri_radius
618 IF (xas_tdp_control%do_hfx)
THEN
621 r_val=xas_tdp_control%sx)
623 i_val=xas_tdp_control%x_potential%potential_type)
627 c_val=xas_tdp_control%x_potential%filename)
628 IF (.NOT.
file_exists(xas_tdp_control%x_potential%filename))
THEN
629 cpabort(
"Could not find provided T_C_G_DATA file.")
632 r_val=xas_tdp_control%x_potential%cutoff_radius)
634 xas_tdp_control%x_potential%cutoff_radius =
bohr*xas_tdp_control%x_potential%cutoff_radius
640 r_val=xas_tdp_control%x_potential%omega)
642 r_val=xas_tdp_control%eps_range)
644 CALL erfc_cutoff(xas_tdp_control%eps_range, xas_tdp_control%x_potential%omega, &
645 xas_tdp_control%x_potential%cutoff_radius)
650 r_val=xas_tdp_control%eps_screen)
652 CALL section_vals_val_get(xas_tdp_section,
"KERNEL%EXACT_EXCHANGE%RI_METRIC%_SECTION_PARAMETERS_", &
653 l_val=xas_tdp_control%do_ri_metric)
654 IF (xas_tdp_control%do_ri_metric)
THEN
657 i_val=xas_tdp_control%ri_m_potential%potential_type)
662 c_val=xas_tdp_control%ri_m_potential%filename)
663 IF (.NOT.
file_exists(xas_tdp_control%ri_m_potential%filename))
THEN
664 cpabort(
"Could not find provided T_C_G_DATA file.")
667 r_val=xas_tdp_control%ri_m_potential%cutoff_radius)
669 xas_tdp_control%ri_m_potential%cutoff_radius =
bohr*xas_tdp_control%ri_m_potential%cutoff_radius
675 r_val=xas_tdp_control%ri_m_potential%omega)
677 CALL erfc_cutoff(xas_tdp_control%eps_range, xas_tdp_control%ri_m_potential%omega, &
678 xas_tdp_control%ri_m_potential%cutoff_radius)
683 xas_tdp_control%ri_m_potential = xas_tdp_control%x_potential
689 IF ((.NOT. xas_tdp_control%do_xc) .AND. (.NOT. xas_tdp_control%do_hfx))
THEN
691 xas_tdp_control%do_coulomb = .false.
695 ALLOCATE (xas_tdp_control%ot_settings)
698 l_val=xas_tdp_control%do_ot)
701 SELECT CASE (ot_method)
703 xas_tdp_control%ot_settings%ot_method =
"CG"
705 xas_tdp_control%ot_settings%ot_method =
"DIIS"
709 i_val=xas_tdp_control%ot_max_iter)
711 r_val=xas_tdp_control%ot_eps_iter)
714 CALL section_vals_val_get(xas_tdp_section,
"GW2X%_SECTION_PARAMETERS_", l_val=xas_tdp_control%do_gw2x)
715 IF (xas_tdp_control%do_gw2x)
THEN
720 CALL section_vals_val_get(xas_tdp_section,
"GW2X%MAX_GW2X_ITER", i_val=xas_tdp_control%max_gw2x_iter)
721 CALL section_vals_val_get(xas_tdp_section,
"GW2X%PSEUDO_CANONICAL", l_val=xas_tdp_control%pseudo_canonical)
735 ALLOCATE (xas_tdp_env)
737 xas_tdp_env%nex_atoms = 1
738 xas_tdp_env%nex_kinds = 1
739 xas_tdp_env%fxc_avail = .false.
741 NULLIFY (xas_tdp_env%ex_atom_indices)
742 NULLIFY (xas_tdp_env%ex_kind_indices)
743 NULLIFY (xas_tdp_env%state_types)
744 NULLIFY (xas_tdp_env%donor_states)
745 NULLIFY (xas_tdp_env%qs_loc_env)
746 NULLIFY (xas_tdp_env%mos_of_ex_atoms)
747 NULLIFY (xas_tdp_env%mo_coeff)
748 NULLIFY (xas_tdp_env%ri_inv_coul)
749 NULLIFY (xas_tdp_env%ri_inv_ex)
750 NULLIFY (xas_tdp_env%opt_dist2d_coul)
751 NULLIFY (xas_tdp_env%opt_dist2d_ex)
752 NULLIFY (xas_tdp_env%q_projector)
753 NULLIFY (xas_tdp_env%dipmat)
754 NULLIFY (xas_tdp_env%quadmat)
755 NULLIFY (xas_tdp_env%ri_3c_coul)
756 NULLIFY (xas_tdp_env%ri_3c_ex)
757 NULLIFY (xas_tdp_env%ri_fxc)
758 NULLIFY (xas_tdp_env%orb_soc)
759 NULLIFY (xas_tdp_env%matrix_shalf)
760 NULLIFY (xas_tdp_env%lumo_evecs)
761 NULLIFY (xas_tdp_env%lumo_evals)
762 NULLIFY (xas_tdp_env%ot_prec)
763 NULLIFY (xas_tdp_env%lumo_coeffs)
764 NULLIFY (xas_tdp_env%fock_matrix)
767 xas_tdp_env%state_type_char(1) =
"1s"
768 xas_tdp_env%state_type_char(2) =
"2s"
769 xas_tdp_env%state_type_char(3) =
"2p"
783 IF (
ASSOCIATED(xas_tdp_env))
THEN
784 IF (
ASSOCIATED(xas_tdp_env%ex_atom_indices))
THEN
785 DEALLOCATE (xas_tdp_env%ex_atom_indices)
787 IF (
ASSOCIATED(xas_tdp_env%ex_kind_indices))
THEN
788 DEALLOCATE (xas_tdp_env%ex_kind_indices)
791 IF (
ASSOCIATED(xas_tdp_env%state_types))
THEN
792 DEALLOCATE (xas_tdp_env%state_types)
794 IF (
ASSOCIATED(xas_tdp_env%donor_states))
THEN
795 CALL deallocate_donor_state_set(xas_tdp_env%donor_states)
797 IF (
ASSOCIATED(xas_tdp_env%qs_loc_env))
THEN
799 DEALLOCATE (xas_tdp_env%qs_loc_env)
801 IF (
ASSOCIATED(xas_tdp_env%mos_of_ex_atoms))
THEN
802 DEALLOCATE (xas_tdp_env%mos_of_ex_atoms)
804 IF (
ASSOCIATED(xas_tdp_env%mo_coeff))
THEN
805 DO i = 1,
SIZE(xas_tdp_env%mo_coeff)
808 DEALLOCATE (xas_tdp_env%mo_coeff)
810 IF (
ASSOCIATED(xas_tdp_env%ri_inv_coul))
THEN
811 DEALLOCATE (xas_tdp_env%ri_inv_coul)
813 IF (
ASSOCIATED(xas_tdp_env%ri_inv_ex))
THEN
814 DEALLOCATE (xas_tdp_env%ri_inv_ex)
816 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_coul))
THEN
819 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_ex))
THEN
822 IF (
ASSOCIATED(xas_tdp_env%q_projector))
THEN
823 DO i = 1,
SIZE(xas_tdp_env%q_projector)
826 DEALLOCATE (xas_tdp_env%q_projector)
828 IF (
ASSOCIATED(xas_tdp_env%dipmat))
THEN
829 DO i = 1,
SIZE(xas_tdp_env%dipmat)
832 DEALLOCATE (xas_tdp_env%dipmat)
834 IF (
ASSOCIATED(xas_tdp_env%quadmat))
THEN
835 DO i = 1,
SIZE(xas_tdp_env%quadmat)
838 DEALLOCATE (xas_tdp_env%quadmat)
840 IF (
ASSOCIATED(xas_tdp_env%ri_3c_coul))
THEN
841 CALL dbt_destroy(xas_tdp_env%ri_3c_coul)
842 DEALLOCATE (xas_tdp_env%ri_3c_coul)
844 IF (
ASSOCIATED(xas_tdp_env%ri_3c_ex))
THEN
845 CALL dbt_destroy(xas_tdp_env%ri_3c_ex)
846 DEALLOCATE (xas_tdp_env%ri_3c_ex)
848 IF (
ASSOCIATED(xas_tdp_env%ri_fxc))
THEN
849 DO i = 1,
SIZE(xas_tdp_env%ri_fxc, 1)
850 DO j = 1,
SIZE(xas_tdp_env%ri_fxc, 2)
851 IF (
ASSOCIATED(xas_tdp_env%ri_fxc(i, j)%array))
THEN
852 DEALLOCATE (xas_tdp_env%ri_fxc(i, j)%array)
856 DEALLOCATE (xas_tdp_env%ri_fxc)
858 IF (
ASSOCIATED(xas_tdp_env%orb_soc))
THEN
859 DO i = 1,
SIZE(xas_tdp_env%orb_soc)
861 DEALLOCATE (xas_tdp_env%orb_soc(i)%matrix)
863 DEALLOCATE (xas_tdp_env%orb_soc)
868 IF (
ASSOCIATED(xas_tdp_env%lumo_evals))
THEN
869 DO i = 1,
SIZE(xas_tdp_env%lumo_evals)
870 DEALLOCATE (xas_tdp_env%lumo_evals(i)%array)
872 DEALLOCATE (xas_tdp_env%lumo_evals)
874 IF (
ASSOCIATED(xas_tdp_env%ot_prec))
THEN
875 DO i = 1,
SIZE(xas_tdp_env%ot_prec)
877 DEALLOCATE (xas_tdp_env%ot_prec(i)%matrix)
879 DEALLOCATE (xas_tdp_env%ot_prec)
881 IF (
ASSOCIATED(xas_tdp_env%matrix_shalf))
THEN
883 DEALLOCATE (xas_tdp_env%matrix_shalf)
884 NULLIFY (xas_tdp_env%matrix_shalf)
886 IF (
ASSOCIATED(xas_tdp_env%fock_matrix))
THEN
887 DO i = 1,
SIZE(xas_tdp_env%fock_matrix)
889 DEALLOCATE (xas_tdp_env%fock_matrix(i)%matrix)
891 DEALLOCATE (xas_tdp_env%fock_matrix)
893 IF (
ASSOCIATED(xas_tdp_env%lumo_coeffs))
THEN
895 DEALLOCATE (xas_tdp_env%lumo_coeffs)
896 NULLIFY (xas_tdp_env%lumo_coeffs)
898 DEALLOCATE (xas_tdp_env)
911 INTEGER,
INTENT(IN),
OPTIONAL :: nex_atoms, nex_kinds
913 cpassert(
ASSOCIATED(xas_tdp_env))
915 IF (
PRESENT(nex_atoms)) xas_tdp_env%nex_atoms = nex_atoms
916 IF (
PRESENT(nex_kinds)) xas_tdp_env%nex_kinds = nex_kinds
928 NULLIFY (donor_state%energy_evals)
929 NULLIFY (donor_state%gw2x_evals)
930 NULLIFY (donor_state%mo_indices)
931 NULLIFY (donor_state%sc_coeffs)
932 NULLIFY (donor_state%sf_coeffs)
933 NULLIFY (donor_state%sg_coeffs)
934 NULLIFY (donor_state%tp_coeffs)
935 NULLIFY (donor_state%gs_coeffs)
936 NULLIFY (donor_state%contract_coeffs)
937 NULLIFY (donor_state%sc_evals)
938 NULLIFY (donor_state%sf_evals)
939 NULLIFY (donor_state%sg_evals)
940 NULLIFY (donor_state%tp_evals)
941 NULLIFY (donor_state%soc_evals)
942 NULLIFY (donor_state%soc_osc_str)
943 NULLIFY (donor_state%osc_str)
944 NULLIFY (donor_state%alpha_osc)
945 NULLIFY (donor_state%beta_osc)
946 NULLIFY (donor_state%soc_quad_osc_str)
947 NULLIFY (donor_state%quad_osc_str)
948 NULLIFY (donor_state%sc_matrix_tdp)
949 NULLIFY (donor_state%sf_matrix_tdp)
950 NULLIFY (donor_state%sg_matrix_tdp)
951 NULLIFY (donor_state%tp_matrix_tdp)
952 NULLIFY (donor_state%metric)
953 NULLIFY (donor_state%matrix_aux)
954 NULLIFY (donor_state%blk_size)
955 NULLIFY (donor_state%dbcsr_dist)
970 INTEGER,
INTENT(IN),
OPTIONAL :: at_index
971 CHARACTER(LEN=default_string_length),
OPTIONAL :: at_symbol
972 INTEGER,
INTENT(IN),
OPTIONAL :: kind_index, state_type
974 cpassert(
ASSOCIATED(donor_state))
976 IF (
PRESENT(at_index)) donor_state%at_index = at_index
977 IF (
PRESENT(kind_index)) donor_state%kind_index = kind_index
978 IF (
PRESENT(state_type)) donor_state%state_type = state_type
979 IF (
PRESENT(at_symbol)) donor_state%at_symbol = at_symbol
987 SUBROUTINE deallocate_donor_state_set(donor_state_set)
992 IF (
ASSOCIATED(donor_state_set))
THEN
993 DO i = 1,
SIZE(donor_state_set)
995 IF (
ASSOCIATED(donor_state_set(i)%sc_coeffs))
THEN
997 DEALLOCATE (donor_state_set(i)%sc_coeffs)
1000 IF (
ASSOCIATED(donor_state_set(i)%sf_coeffs))
THEN
1002 DEALLOCATE (donor_state_set(i)%sf_coeffs)
1005 IF (
ASSOCIATED(donor_state_set(i)%sg_coeffs))
THEN
1007 DEALLOCATE (donor_state_set(i)%sg_coeffs)
1010 IF (
ASSOCIATED(donor_state_set(i)%tp_coeffs))
THEN
1012 DEALLOCATE (donor_state_set(i)%tp_coeffs)
1015 IF (
ASSOCIATED(donor_state_set(i)%gs_coeffs))
THEN
1017 DEALLOCATE (donor_state_set(i)%gs_coeffs)
1020 IF (
ASSOCIATED(donor_state_set(i)%contract_coeffs))
THEN
1021 DEALLOCATE (donor_state_set(i)%contract_coeffs)
1024 IF (
ASSOCIATED(donor_state_set(i)%sc_evals))
THEN
1025 DEALLOCATE (donor_state_set(i)%sc_evals)
1028 IF (
ASSOCIATED(donor_state_set(i)%sf_evals))
THEN
1029 DEALLOCATE (donor_state_set(i)%sf_evals)
1032 IF (
ASSOCIATED(donor_state_set(i)%sg_evals))
THEN
1033 DEALLOCATE (donor_state_set(i)%sg_evals)
1036 IF (
ASSOCIATED(donor_state_set(i)%tp_evals))
THEN
1037 DEALLOCATE (donor_state_set(i)%tp_evals)
1040 IF (
ASSOCIATED(donor_state_set(i)%soc_evals))
THEN
1041 DEALLOCATE (donor_state_set(i)%soc_evals)
1044 IF (
ASSOCIATED(donor_state_set(i)%alpha_osc))
THEN
1045 DEALLOCATE (donor_state_set(i)%alpha_osc)
1048 IF (
ASSOCIATED(donor_state_set(i)%beta_osc))
THEN
1049 DEALLOCATE (donor_state_set(i)%beta_osc)
1052 IF (
ASSOCIATED(donor_state_set(i)%osc_str))
THEN
1053 DEALLOCATE (donor_state_set(i)%osc_str)
1056 IF (
ASSOCIATED(donor_state_set(i)%soc_osc_str))
THEN
1057 DEALLOCATE (donor_state_set(i)%soc_osc_str)
1060 IF (
ASSOCIATED(donor_state_set(i)%quad_osc_str))
THEN
1061 DEALLOCATE (donor_state_set(i)%quad_osc_str)
1064 IF (
ASSOCIATED(donor_state_set(i)%soc_quad_osc_str))
THEN
1065 DEALLOCATE (donor_state_set(i)%soc_quad_osc_str)
1068 IF (
ASSOCIATED(donor_state_set(i)%energy_evals))
THEN
1069 DEALLOCATE (donor_state_set(i)%energy_evals)
1072 IF (
ASSOCIATED(donor_state_set(i)%gw2x_evals))
THEN
1073 DEALLOCATE (donor_state_set(i)%gw2x_evals)
1076 IF (
ASSOCIATED(donor_state_set(i)%mo_indices))
THEN
1077 DEALLOCATE (donor_state_set(i)%mo_indices)
1080 IF (
ASSOCIATED(donor_state_set(i)%sc_matrix_tdp))
THEN
1082 DEALLOCATE (donor_state_set(i)%sc_matrix_tdp)
1085 IF (
ASSOCIATED(donor_state_set(i)%sf_matrix_tdp))
THEN
1087 DEALLOCATE (donor_state_set(i)%sf_matrix_tdp)
1090 IF (
ASSOCIATED(donor_state_set(i)%sg_matrix_tdp))
THEN
1092 DEALLOCATE (donor_state_set(i)%sg_matrix_tdp)
1095 IF (
ASSOCIATED(donor_state_set(i)%tp_matrix_tdp))
THEN
1097 DEALLOCATE (donor_state_set(i)%tp_matrix_tdp)
1100 IF (
ASSOCIATED(donor_state_set(i)%metric))
THEN
1101 DO j = 1,
SIZE(donor_state_set(i)%metric)
1102 IF (
ASSOCIATED(donor_state_set(i)%metric(j)%matrix))
THEN
1104 DEALLOCATE (donor_state_set(i)%metric(j)%matrix)
1107 DEALLOCATE (donor_state_set(i)%metric)
1110 IF (
ASSOCIATED(donor_state_set(i)%matrix_aux))
THEN
1112 DEALLOCATE (donor_state_set(i)%matrix_aux)
1115 IF (
ASSOCIATED(donor_state_set(i)%blk_size))
THEN
1116 DEALLOCATE (donor_state_set(i)%blk_size)
1119 IF (
ASSOCIATED(donor_state_set(i)%dbcsr_dist))
THEN
1121 DEALLOCATE (donor_state_set(i)%dbcsr_dist)
1124 DEALLOCATE (donor_state_set)
1127 END SUBROUTINE deallocate_donor_state_set
1139 IF (
ASSOCIATED(donor_state%sc_evals))
DEALLOCATE (donor_state%sc_evals)
1140 IF (
ASSOCIATED(donor_state%contract_coeffs))
DEALLOCATE (donor_state%contract_coeffs)
1141 IF (
ASSOCIATED(donor_state%sf_evals))
DEALLOCATE (donor_state%sf_evals)
1142 IF (
ASSOCIATED(donor_state%sg_evals))
DEALLOCATE (donor_state%sg_evals)
1143 IF (
ASSOCIATED(donor_state%tp_evals))
DEALLOCATE (donor_state%tp_evals)
1144 IF (
ASSOCIATED(donor_state%soc_evals))
DEALLOCATE (donor_state%soc_evals)
1145 IF (
ASSOCIATED(donor_state%osc_str))
DEALLOCATE (donor_state%osc_str)
1146 IF (
ASSOCIATED(donor_state%alpha_osc))
DEALLOCATE (donor_state%alpha_osc)
1147 IF (
ASSOCIATED(donor_state%beta_osc))
DEALLOCATE (donor_state%beta_osc)
1148 IF (
ASSOCIATED(donor_state%soc_osc_str))
DEALLOCATE (donor_state%soc_osc_str)
1149 IF (
ASSOCIATED(donor_state%quad_osc_str))
DEALLOCATE (donor_state%quad_osc_str)
1150 IF (
ASSOCIATED(donor_state%soc_quad_osc_str))
DEALLOCATE (donor_state%soc_quad_osc_str)
1151 IF (
ASSOCIATED(donor_state%gs_coeffs))
THEN
1153 DEALLOCATE (donor_state%gs_coeffs)
1154 NULLIFY (donor_state%gs_coeffs)
1156 IF (
ASSOCIATED(donor_state%blk_size))
DEALLOCATE (donor_state%blk_size)
1158 IF (
ASSOCIATED(donor_state%sc_coeffs))
THEN
1160 DEALLOCATE (donor_state%sc_coeffs)
1161 NULLIFY (donor_state%sc_coeffs)
1164 IF (
ASSOCIATED(donor_state%sf_coeffs))
THEN
1166 DEALLOCATE (donor_state%sf_coeffs)
1167 NULLIFY (donor_state%sf_coeffs)
1170 IF (
ASSOCIATED(donor_state%sg_coeffs))
THEN
1172 DEALLOCATE (donor_state%sg_coeffs)
1173 NULLIFY (donor_state%sg_coeffs)
1176 IF (
ASSOCIATED(donor_state%tp_coeffs))
THEN
1178 DEALLOCATE (donor_state%tp_coeffs)
1179 NULLIFY (donor_state%tp_coeffs)
1182 IF (
ASSOCIATED(donor_state%sc_matrix_tdp))
THEN
1184 DEALLOCATE (donor_state%sc_matrix_tdp)
1187 IF (
ASSOCIATED(donor_state%sf_matrix_tdp))
THEN
1189 DEALLOCATE (donor_state%sf_matrix_tdp)
1192 IF (
ASSOCIATED(donor_state%sg_matrix_tdp))
THEN
1194 DEALLOCATE (donor_state%sg_matrix_tdp)
1197 IF (
ASSOCIATED(donor_state%tp_matrix_tdp))
THEN
1199 DEALLOCATE (donor_state%tp_matrix_tdp)
1202 IF (
ASSOCIATED(donor_state%metric))
THEN
1203 DO i = 1,
SIZE(donor_state%metric)
1204 IF (
ASSOCIATED(donor_state%metric(i)%matrix))
THEN
1206 DEALLOCATE (donor_state%metric(i)%matrix)
1209 DEALLOCATE (donor_state%metric)
1212 IF (
ASSOCIATED(donor_state%matrix_aux))
THEN
1214 DEALLOCATE (donor_state%matrix_aux)
1217 IF (
ASSOCIATED(donor_state%dbcsr_dist))
THEN
1219 DEALLOCATE (donor_state%dbcsr_dist)
1232 ALLOCATE (xas_atom_env)
1234 xas_atom_env%nspins = 1
1235 xas_atom_env%ri_radius = 0.0_dp
1236 NULLIFY (xas_atom_env%excited_atoms)
1237 NULLIFY (xas_atom_env%excited_kinds)
1238 NULLIFY (xas_atom_env%grid_atom_set)
1239 NULLIFY (xas_atom_env%harmonics_atom_set)
1240 NULLIFY (xas_atom_env%ri_dcoeff)
1241 NULLIFY (xas_atom_env%ri_sphi_so)
1242 NULLIFY (xas_atom_env%orb_sphi_so)
1243 NULLIFY (xas_atom_env%exat_neighbors)
1244 NULLIFY (xas_atom_env%gr)
1245 NULLIFY (xas_atom_env%ga)
1246 NULLIFY (xas_atom_env%dgr1)
1247 NULLIFY (xas_atom_env%dgr2)
1248 NULLIFY (xas_atom_env%dga1)
1249 NULLIFY (xas_atom_env%dga2)
1263 IF (
ASSOCIATED(xas_atom_env%grid_atom_set))
THEN
1264 DO i = 1,
SIZE(xas_atom_env%grid_atom_set)
1265 IF (
ASSOCIATED(xas_atom_env%grid_atom_set(i)%grid_atom))
THEN
1269 DEALLOCATE (xas_atom_env%grid_atom_set)
1272 IF (
ASSOCIATED(xas_atom_env%harmonics_atom_set))
THEN
1273 DO i = 1,
SIZE(xas_atom_env%harmonics_atom_set)
1274 IF (
ASSOCIATED(xas_atom_env%harmonics_atom_set(i)%harmonics_atom))
THEN
1278 DEALLOCATE (xas_atom_env%harmonics_atom_set)
1284 IF (
ASSOCIATED(xas_atom_env%ri_dcoeff))
THEN
1285 DO i = 1,
SIZE(xas_atom_env%ri_dcoeff, 1)
1286 DO j = 1,
SIZE(xas_atom_env%ri_dcoeff, 2)
1287 DO k = 1,
SIZE(xas_atom_env%ri_dcoeff, 3)
1288 IF (
ASSOCIATED(xas_atom_env%ri_dcoeff(i, j, k)%array))
THEN
1289 DEALLOCATE (xas_atom_env%ri_dcoeff(i, j, k)%array)
1294 DEALLOCATE (xas_atom_env%ri_dcoeff)
1297 IF (
ASSOCIATED(xas_atom_env%ri_sphi_so))
THEN
1298 DO i = 1,
SIZE(xas_atom_env%ri_sphi_so)
1299 IF (
ASSOCIATED(xas_atom_env%ri_sphi_so(i)%array))
THEN
1300 DEALLOCATE (xas_atom_env%ri_sphi_so(i)%array)
1303 DEALLOCATE (xas_atom_env%ri_sphi_so)
1306 IF (
ASSOCIATED(xas_atom_env%exat_neighbors))
THEN
1307 DO i = 1,
SIZE(xas_atom_env%exat_neighbors)
1308 IF (
ASSOCIATED(xas_atom_env%exat_neighbors(i)%array))
THEN
1309 DEALLOCATE (xas_atom_env%exat_neighbors(i)%array)
1312 DEALLOCATE (xas_atom_env%exat_neighbors)
1315 IF (
ASSOCIATED(xas_atom_env%gr))
THEN
1316 DO i = 1,
SIZE(xas_atom_env%gr)
1317 IF (
ASSOCIATED(xas_atom_env%gr(i)%array))
THEN
1318 DEALLOCATE (xas_atom_env%gr(i)%array)
1321 DEALLOCATE (xas_atom_env%gr)
1324 IF (
ASSOCIATED(xas_atom_env%ga))
THEN
1325 DO i = 1,
SIZE(xas_atom_env%ga)
1326 IF (
ASSOCIATED(xas_atom_env%ga(i)%array))
THEN
1327 DEALLOCATE (xas_atom_env%ga(i)%array)
1330 DEALLOCATE (xas_atom_env%ga)
1333 IF (
ASSOCIATED(xas_atom_env%dgr1))
THEN
1334 DO i = 1,
SIZE(xas_atom_env%dgr1)
1335 IF (
ASSOCIATED(xas_atom_env%dgr1(i)%array))
THEN
1336 DEALLOCATE (xas_atom_env%dgr1(i)%array)
1339 DEALLOCATE (xas_atom_env%dgr1)
1342 IF (
ASSOCIATED(xas_atom_env%dgr2))
THEN
1343 DO i = 1,
SIZE(xas_atom_env%dgr2)
1344 IF (
ASSOCIATED(xas_atom_env%dgr2(i)%array))
THEN
1345 DEALLOCATE (xas_atom_env%dgr2(i)%array)
1348 DEALLOCATE (xas_atom_env%dgr2)
1351 IF (
ASSOCIATED(xas_atom_env%dga1))
THEN
1352 DO i = 1,
SIZE(xas_atom_env%dga1)
1353 IF (
ASSOCIATED(xas_atom_env%dga1(i)%array))
THEN
1354 DEALLOCATE (xas_atom_env%dga1(i)%array)
1357 DEALLOCATE (xas_atom_env%dga1)
1360 IF (
ASSOCIATED(xas_atom_env%dga2))
THEN
1361 DO i = 1,
SIZE(xas_atom_env%dga2)
1362 IF (
ASSOCIATED(xas_atom_env%dga2(i)%array))
THEN
1363 DEALLOCATE (xas_atom_env%dga2(i)%array)
1366 DEALLOCATE (xas_atom_env%dga2)
1369 IF (
ASSOCIATED(xas_atom_env%orb_sphi_so))
THEN
1370 DO i = 1,
SIZE(xas_atom_env%orb_sphi_so)
1371 IF (
ASSOCIATED(xas_atom_env%orb_sphi_so(i)%array))
THEN
1372 DEALLOCATE (xas_atom_env%orb_sphi_so(i)%array)
1375 DEALLOCATE (xas_atom_env%orb_sphi_so)
1381 DEALLOCATE (xas_atom_env)
1395 INTEGER,
INTENT(IN) ::
atom
1396 LOGICAL :: end_of_batch
1400 IF (
ASSOCIATED(xas_tdp_env%ri_fxc))
THEN
1401 DO i = 1,
SIZE(xas_tdp_env%ri_fxc, 2)
1402 IF (
ASSOCIATED(xas_tdp_env%ri_fxc(
atom, i)%array))
THEN
1403 DEALLOCATE (xas_tdp_env%ri_fxc(
atom, i)%array)
1408 IF (end_of_batch)
THEN
1409 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_ex))
THEN
1413 IF (
ASSOCIATED(xas_tdp_env%ri_3c_ex))
THEN
1414 CALL dbt_destroy(xas_tdp_env%ri_3c_ex)
1415 DEALLOCATE (xas_tdp_env%ri_3c_ex)
1419 xas_tdp_env%fxc_avail = .false.
1433 CALL batch_info%para_env%free()
1435 IF (
ASSOCIATED(batch_info%so_proc_info))
THEN
1436 DO i = 1,
SIZE(batch_info%so_proc_info)
1437 IF (
ASSOCIATED(batch_info%so_proc_info(i)%array))
THEN
1438 DEALLOCATE (batch_info%so_proc_info(i)%array)
1441 DEALLOCATE (batch_info%so_proc_info)
1456 INTEGER,
INTENT(OUT) :: batch_size, nbatch
1457 INTEGER,
INTENT(IN) :: nex_atom, nprocs
1459 INTEGER :: rest, test_size
1463 IF (nex_atom >= nprocs)
THEN
1468 DO test_size = 1, min(nprocs, 4)
1469 nbatch = nprocs/test_size
1470 IF (
modulo(nex_atom, nbatch) < rest)
THEN
1471 rest =
modulo(nex_atom, nbatch)
1472 batch_size = test_size
1475 nbatch = nprocs/batch_size
1483 batch_size = min(nprocs/nbatch, 128)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
various utilities that regard array of different kinds: output, allocation,... maybe it is not a good...
subroutine, public dbcsr_distribution_release(dist)
...
subroutine, public dbcsr_release_p(matrix)
...
subroutine, public dbcsr_release(matrix)
...
Utility routines to open and close files. Tracking of preconnections.
logical function, public file_exists(file_name)
Checks if file exists, considering also the file discovery mechanism.
represent a full matrix distributed on many processors
This is the start of a dbt_api, all publically needed functions are exported here....
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)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
2- and 3-center electron repulsion integral routines based on libint2 Currently available operators: ...
Interface to the Libint-Library or a c++ wrapper.
subroutine, public cp_libint_static_cleanup()
Collection of simple mathematical functions and subroutines.
subroutine, public erfc_cutoff(eps, omg, r_cutoff)
compute a truncation radius for the shortrange operator
Utility routines for the memory handling.
Interface to the message passing library MPI.
Definition of physical constants:
real(kind=dp), parameter, public evolt
real(kind=dp), parameter, public bohr
subroutine, public deallocate_grid_atom(grid_atom)
Deallocate a Gaussian-type orbital (GTO) basis set data set.
subroutine, public deallocate_harmonics_atom(harmonics)
Deallocate the spherical harmonics set for the atom grid.
New version of the module for the localization of the molecular orbitals This should be able to use d...
subroutine, public qs_loc_env_release(qs_loc_env)
...
subroutine, public qs_ot_settings_init(settings)
sets default values for the settings type
Define XAS TDP control type and associated create, release, etc subroutines, as well as XAS TDP envir...
subroutine, public xas_tdp_env_create(xas_tdp_env)
Creates a TDP XAS environment type.
subroutine, public xas_tdp_env_release(xas_tdp_env)
Releases the TDP XAS environment type.
subroutine, public donor_state_create(donor_state)
Creates a donor_state.
subroutine, public get_proc_batch_sizes(batch_size, nbatch, nex_atom, nprocs)
Uses heuristics to determine a good batching of the processros for fxc integration.
subroutine, public xas_tdp_control_release(xas_tdp_control)
Releases the xas_tdp_control_type.
subroutine, public xas_atom_env_create(xas_atom_env)
Creates a xas_atom_env type.
subroutine, public set_xas_tdp_env(xas_tdp_env, nex_atoms, nex_kinds)
Sets values of selected variables within the TDP XAS environment type.
subroutine, public free_ds_memory(donor_state)
Deallocate a donor_state's heavy attributes.
subroutine, public release_batch_info(batch_info)
Releases a batch_info type.
subroutine, public set_donor_state(donor_state, at_index, at_symbol, kind_index, state_type)
sets specified values of the donor state type
subroutine, public xas_tdp_control_create(xas_tdp_control)
Creates and initializes the xas_tdp_control_type.
subroutine, public free_exat_memory(xas_tdp_env, atom, end_of_batch)
Releases the memory heavy attribute of xas_tdp_env that are specific to the current excited atom.
subroutine, public xas_atom_env_release(xas_atom_env)
Releases the xas_atom_env type.
subroutine, public read_xas_tdp_control(xas_tdp_control, xas_tdp_section)
Reads the inputs and stores in xas_tdp_control_type.
represent a pointer to a 1d array
represent a pointer to a 1d array
represent a pointer to a 2d array
represent a pointer to a 2d array
represent a pointer to a 3d array
distributes pairs on a 2d grid of processors
stores all the informations relevant to an mpi environment
contains all the info needed by quickstep to calculate the spread of a selected set of orbitals and i...
notice, this variable needs to be copyable, needed for spins as e.g. in qs_ot_scf
Type containing informations about a single donor state.
a environment type that contains all the info needed for XAS_TDP atomic grid calculations
Type containing control information for TDP XAS calculations.
Type containing informations such as inputs and results for TDP XAS calculations.