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 :: do_loc = .false.
128 LOGICAL :: do_uks = .false.
129 LOGICAL :: do_roks = .false.
130 LOGICAL :: do_soc = .false.
131 LOGICAL :: do_singlet = .false.
132 LOGICAL :: do_triplet = .false.
133 LOGICAL :: do_spin_cons = .false.
134 LOGICAL :: do_spin_flip = .false.
135 LOGICAL :: is_periodic = .false.
136 INTEGER,
DIMENSION(:),
POINTER :: list_ex_atoms => null()
137 CHARACTER(len=default_string_length), &
138 DIMENSION(:),
POINTER :: list_ex_kinds => null()
139 INTEGER,
DIMENSION(:, :),
POINTER :: state_types => null()
142 CHARACTER(len=default_string_length), &
143 DIMENSION(:, :),
POINTER :: grid_info => null()
146 LOGICAL :: do_gw2x = .false.
147 LOGICAL :: xps_only = .false.
148 REAL(
dp) :: gw2x_eps = 0.0_dp
149 LOGICAL :: pseudo_canonical = .false.
150 INTEGER :: max_gw2x_iter = 0
151 REAL(
dp) :: c_os = 0.0_dp
152 REAL(
dp) :: c_ss = 0.0_dp
153 INTEGER :: batch_size = 0
195 CHARACTER(len=2),
DIMENSION(3) :: state_type_char =
""
196 INTEGER :: nex_atoms = 0
197 INTEGER :: nex_kinds = 0
198 INTEGER,
DIMENSION(:),
POINTER :: ex_atom_indices => null()
199 INTEGER,
DIMENSION(:),
POINTER :: ex_kind_indices => null()
200 INTEGER,
DIMENSION(:, :),
POINTER :: state_types => null()
201 TYPE(dbt_type),
POINTER :: ri_3c_coul => null()
202 TYPE(dbt_type),
POINTER :: ri_3c_ex => null()
204 POINTER :: donor_states => null()
205 INTEGER,
DIMENSION(:, :, :),
POINTER :: mos_of_ex_atoms => null()
207 REAL(
dp),
DIMENSION(:, :),
POINTER :: ri_inv_coul => null()
208 REAL(
dp),
DIMENSION(:, :),
POINTER :: ri_inv_ex => null()
212 POINTER :: q_projector => null()
214 POINTER :: dipmat => null()
216 POINTER :: quadmat => null()
218 POINTER :: ri_fxc => null()
219 LOGICAL :: fxc_avail = .false.
221 POINTER :: orb_soc => null()
224 POINTER :: lumo_evecs => null()
227 POINTER :: lumo_evals => null()
229 POINTER :: ot_prec => null()
231 POINTER :: fock_matrix => null()
270 INTEGER :: at_index = 0
271 INTEGER :: kind_index = 0
272 INTEGER :: ndo_mo = 0
273 CHARACTER(LEN=default_string_length) :: at_symbol =
""
274 INTEGER :: state_type = 0
275 INTEGER,
DIMENSION(:),
POINTER :: blk_size => null()
276 REAL(
dp),
DIMENSION(:, :),
POINTER :: energy_evals => null()
277 REAL(
dp),
DIMENSION(:, :),
POINTER :: gw2x_evals => null()
278 INTEGER,
DIMENSION(:, :),
POINTER :: mo_indices => null()
284 REAL(
dp),
DIMENSION(:, :),
POINTER :: contract_coeffs => null()
285 REAL(
dp),
DIMENSION(:),
POINTER :: sc_evals => null()
286 REAL(
dp),
DIMENSION(:),
POINTER :: sf_evals => null()
287 REAL(
dp),
DIMENSION(:),
POINTER :: sg_evals => null()
288 REAL(
dp),
DIMENSION(:),
POINTER :: tp_evals => null()
289 REAL(
dp),
DIMENSION(:),
POINTER :: soc_evals => null()
290 REAL(
dp),
DIMENSION(:, :),
POINTER :: osc_str => null()
291 REAL(
dp),
DIMENSION(:, :),
POINTER :: soc_osc_str => null()
292 REAL(
dp),
DIMENSION(:),
POINTER :: quad_osc_str => null()
293 REAL(
dp),
DIMENSION(:),
POINTER :: soc_quad_osc_str => null()
299 POINTER :: metric => null()
306 TYPE grid_atom_p_type
308 END TYPE grid_atom_p_type
310 TYPE harmonics_atom_p_type
312 END TYPE harmonics_atom_p_type
316 INTEGER :: batch_size = 0
317 INTEGER :: nbatch = 0
318 INTEGER :: ibatch = 0
320 INTEGER,
DIMENSION(:),
ALLOCATABLE :: nso_proc
321 INTEGER,
DIMENSION(:, :),
ALLOCATABLE :: so_bo
344 INTEGER :: nspins = 0
345 REAL(
dp) :: ri_radius = 0.0_dp
346 INTEGER,
DIMENSION(:),
POINTER :: excited_atoms => null()
347 INTEGER,
DIMENSION(:),
POINTER :: excited_kinds => null()
348 INTEGER,
DIMENSION(:),
POINTER :: proc_of_exat => null()
349 TYPE(grid_atom_p_type),
DIMENSION(:),
POINTER :: grid_atom_set => null()
350 TYPE(harmonics_atom_p_type),
DIMENSION(:), &
351 POINTER :: harmonics_atom_set => null()
356 TYPE(
cp_2d_r_p_type),
DIMENSION(:),
POINTER :: ga => null(), gr => null(), dgr1 => null(), dgr2 => null()
360 CHARACTER(len=*),
PARAMETER,
PRIVATE :: modulen =
'xas_tdp_types'
383 cpassert(.NOT.
ASSOCIATED(xas_tdp_control))
384 ALLOCATE (xas_tdp_control)
387 xas_tdp_control%n_search = -1
389 xas_tdp_control%do_hfx = .false.
390 xas_tdp_control%do_xc = .false.
391 xas_tdp_control%do_coulomb = .true.
392 xas_tdp_control%do_ri_metric = .false.
393 xas_tdp_control%sx = 1.0_dp
394 xas_tdp_control%eps_range = 1.0e-6_dp
395 xas_tdp_control%eps_screen = 1.0e-10_dp
396 xas_tdp_control%eps_pgf = -1.0_dp
397 xas_tdp_control%eps_filter = 1.0e-10_dp
398 xas_tdp_control%ri_radius = 0.0_dp
400 xas_tdp_control%x_potential%cutoff_radius = 0.0_dp
401 xas_tdp_control%x_potential%omega = 0.0_dp
402 xas_tdp_control%x_potential%filename =
" "
404 xas_tdp_control%ri_m_potential%cutoff_radius = 0.0_dp
405 xas_tdp_control%ri_m_potential%omega = 0.0_dp
406 xas_tdp_control%ri_m_potential%filename =
" "
407 xas_tdp_control%check_only = .false.
408 xas_tdp_control%tamm_dancoff = .false.
409 xas_tdp_control%do_ot = .true.
410 xas_tdp_control%do_quad = .false.
411 xas_tdp_control%xyz_dip = .false.
412 xas_tdp_control%do_loc = .false.
413 xas_tdp_control%do_uks = .false.
414 xas_tdp_control%do_roks = .false.
415 xas_tdp_control%do_soc = .false.
416 xas_tdp_control%do_singlet = .false.
417 xas_tdp_control%do_triplet = .false.
418 xas_tdp_control%do_spin_cons = .false.
419 xas_tdp_control%do_spin_flip = .false.
420 xas_tdp_control%is_periodic = .false.
421 xas_tdp_control%n_excited = -1
422 xas_tdp_control%e_range = -1.0_dp
423 xas_tdp_control%ot_max_iter = 500
424 xas_tdp_control%ot_eps_iter = 1.0e-4_dp
425 xas_tdp_control%c_os = 1.0_dp
426 xas_tdp_control%c_ss = 1.0_dp
427 xas_tdp_control%batch_size = 64
428 xas_tdp_control%do_gw2x = .false.
429 xas_tdp_control%xps_only = .false.
430 NULLIFY (xas_tdp_control%state_types)
431 NULLIFY (xas_tdp_control%list_ex_atoms)
432 NULLIFY (xas_tdp_control%list_ex_kinds)
433 NULLIFY (xas_tdp_control%loc_subsection)
434 NULLIFY (xas_tdp_control%print_loc_subsection)
435 NULLIFY (xas_tdp_control%grid_info)
436 NULLIFY (xas_tdp_control%ot_settings)
448 IF (
ASSOCIATED(xas_tdp_control))
THEN
449 IF (
ASSOCIATED(xas_tdp_control%list_ex_atoms))
THEN
450 DEALLOCATE (xas_tdp_control%list_ex_atoms)
452 IF (
ASSOCIATED(xas_tdp_control%list_ex_kinds))
THEN
453 DEALLOCATE (xas_tdp_control%list_ex_kinds)
455 IF (
ASSOCIATED(xas_tdp_control%state_types))
THEN
456 DEALLOCATE (xas_tdp_control%state_types)
458 IF (
ASSOCIATED(xas_tdp_control%grid_info))
THEN
459 DEALLOCATE (xas_tdp_control%grid_info)
461 IF (
ASSOCIATED(xas_tdp_control%loc_subsection))
THEN
465 IF (
ASSOCIATED(xas_tdp_control%ot_settings))
THEN
466 DEALLOCATE (xas_tdp_control%ot_settings)
468 DEALLOCATE (xas_tdp_control)
483 CHARACTER(len=default_string_length), &
484 DIMENSION(:),
POINTER :: k_list
485 INTEGER :: excitation, irep, nexc, nrep, ot_method, &
487 INTEGER,
DIMENSION(:),
POINTER :: a_list, t_list
489 NULLIFY (k_list, a_list, t_list)
494 l_val=xas_tdp_control%check_only)
497 l_val=xas_tdp_control%tamm_dancoff)
500 l_val=xas_tdp_control%do_soc)
509 IF (nrep > 0)
CALL section_vals_val_get(xas_tdp_section,
"EPS_PGF_XAS", r_val=xas_tdp_control%eps_pgf)
515 IF (.NOT.
ASSOCIATED(xas_tdp_control%grid_info))
THEN
516 ALLOCATE (xas_tdp_control%grid_info(nrep, 3))
519 IF (
SIZE(k_list) .NE. 3) cpabort(
"The GRID keyword needs three values")
520 xas_tdp_control%grid_info(irep, :) = k_list
527 IF (excitation ==
tddfpt_singlet) xas_tdp_control%do_singlet = .true.
528 IF (excitation ==
tddfpt_triplet) xas_tdp_control%do_triplet = .true.
534 i_val=xas_tdp_control%n_excited)
536 r_val=xas_tdp_control%e_range)
538 xas_tdp_control%e_range = xas_tdp_control%e_range/
evolt
543 i_val=xas_tdp_control%define_excited)
545 IF (.NOT.
ASSOCIATED(xas_tdp_control%list_ex_kinds))
THEN
548 ALLOCATE (xas_tdp_control%list_ex_kinds(0))
554 IF (
ASSOCIATED(k_list))
THEN
556 ALLOCATE (xas_tdp_control%list_ex_kinds(nexc))
557 xas_tdp_control%list_ex_kinds = k_list
563 IF (.NOT.
ASSOCIATED(xas_tdp_control%list_ex_atoms))
THEN
566 ALLOCATE (xas_tdp_control%list_ex_atoms(0))
572 IF (
ASSOCIATED(a_list))
THEN
574 CALL reallocate(xas_tdp_control%list_ex_atoms, 1, nexc)
575 xas_tdp_control%list_ex_atoms = a_list
583 IF (.NOT.
ASSOCIATED(xas_tdp_control%state_types))
THEN
584 ALLOCATE (xas_tdp_control%state_types(nrep, nexc))
586 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%STATE_TYPES", i_rep_val=irep, i_vals=t_list)
587 IF (
SIZE(t_list) .NE. nexc)
THEN
588 cpabort(
"The STATE_TYPES keywords do not have the correct number of entries.")
590 xas_tdp_control%state_types(irep, :) = t_list
593 IF (all(xas_tdp_control%state_types == 0)) cpabort(
"Please specify STATE_TYPES")
595 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%N_SEARCH", i_val=xas_tdp_control%n_search)
597 CALL section_vals_val_get(xas_tdp_section,
"DONOR_STATES%LOCALIZE", l_val=xas_tdp_control%do_loc)
602 xas_tdp_control%do_xc = xc_param .NE.
xc_none
604 l_val=xas_tdp_control%do_hfx)
607 xas_tdp_control%ri_radius =
bohr*xas_tdp_control%ri_radius
609 IF (xas_tdp_control%do_hfx)
THEN
612 r_val=xas_tdp_control%sx)
614 i_val=xas_tdp_control%x_potential%potential_type)
618 c_val=xas_tdp_control%x_potential%filename)
619 IF (.NOT.
file_exists(xas_tdp_control%x_potential%filename))
THEN
620 cpabort(
"Could not find provided T_C_G_DATA file.")
623 r_val=xas_tdp_control%x_potential%cutoff_radius)
625 xas_tdp_control%x_potential%cutoff_radius =
bohr*xas_tdp_control%x_potential%cutoff_radius
631 r_val=xas_tdp_control%x_potential%omega)
633 r_val=xas_tdp_control%eps_range)
635 CALL erfc_cutoff(xas_tdp_control%eps_range, xas_tdp_control%x_potential%omega, &
636 xas_tdp_control%x_potential%cutoff_radius)
641 r_val=xas_tdp_control%eps_screen)
643 CALL section_vals_val_get(xas_tdp_section,
"KERNEL%EXACT_EXCHANGE%RI_METRIC%_SECTION_PARAMETERS_", &
644 l_val=xas_tdp_control%do_ri_metric)
645 IF (xas_tdp_control%do_ri_metric)
THEN
648 i_val=xas_tdp_control%ri_m_potential%potential_type)
653 c_val=xas_tdp_control%ri_m_potential%filename)
654 IF (.NOT.
file_exists(xas_tdp_control%ri_m_potential%filename))
THEN
655 cpabort(
"Could not find provided T_C_G_DATA file.")
658 r_val=xas_tdp_control%ri_m_potential%cutoff_radius)
660 xas_tdp_control%ri_m_potential%cutoff_radius =
bohr*xas_tdp_control%ri_m_potential%cutoff_radius
666 r_val=xas_tdp_control%ri_m_potential%omega)
668 CALL erfc_cutoff(xas_tdp_control%eps_range, xas_tdp_control%ri_m_potential%omega, &
669 xas_tdp_control%ri_m_potential%cutoff_radius)
674 xas_tdp_control%ri_m_potential = xas_tdp_control%x_potential
680 IF ((.NOT. xas_tdp_control%do_xc) .AND. (.NOT. xas_tdp_control%do_hfx))
THEN
682 xas_tdp_control%do_coulomb = .false.
686 ALLOCATE (xas_tdp_control%ot_settings)
689 l_val=xas_tdp_control%do_ot)
692 SELECT CASE (ot_method)
694 xas_tdp_control%ot_settings%ot_method =
"CG"
696 xas_tdp_control%ot_settings%ot_method =
"DIIS"
700 i_val=xas_tdp_control%ot_max_iter)
702 r_val=xas_tdp_control%ot_eps_iter)
705 CALL section_vals_val_get(xas_tdp_section,
"GW2X%_SECTION_PARAMETERS_", l_val=xas_tdp_control%do_gw2x)
706 IF (xas_tdp_control%do_gw2x)
THEN
711 CALL section_vals_val_get(xas_tdp_section,
"GW2X%MAX_GW2X_ITER", i_val=xas_tdp_control%max_gw2x_iter)
712 CALL section_vals_val_get(xas_tdp_section,
"GW2X%PSEUDO_CANONICAL", l_val=xas_tdp_control%pseudo_canonical)
726 ALLOCATE (xas_tdp_env)
728 xas_tdp_env%nex_atoms = 1
729 xas_tdp_env%nex_kinds = 1
730 xas_tdp_env%fxc_avail = .false.
732 NULLIFY (xas_tdp_env%ex_atom_indices)
733 NULLIFY (xas_tdp_env%ex_kind_indices)
734 NULLIFY (xas_tdp_env%state_types)
735 NULLIFY (xas_tdp_env%donor_states)
736 NULLIFY (xas_tdp_env%qs_loc_env)
737 NULLIFY (xas_tdp_env%mos_of_ex_atoms)
738 NULLIFY (xas_tdp_env%ri_inv_coul)
739 NULLIFY (xas_tdp_env%ri_inv_ex)
740 NULLIFY (xas_tdp_env%opt_dist2d_coul)
741 NULLIFY (xas_tdp_env%opt_dist2d_ex)
742 NULLIFY (xas_tdp_env%q_projector)
743 NULLIFY (xas_tdp_env%dipmat)
744 NULLIFY (xas_tdp_env%quadmat)
745 NULLIFY (xas_tdp_env%ri_3c_coul)
746 NULLIFY (xas_tdp_env%ri_3c_ex)
747 NULLIFY (xas_tdp_env%ri_fxc)
748 NULLIFY (xas_tdp_env%orb_soc)
749 NULLIFY (xas_tdp_env%matrix_shalf)
750 NULLIFY (xas_tdp_env%lumo_evecs)
751 NULLIFY (xas_tdp_env%lumo_evals)
752 NULLIFY (xas_tdp_env%ot_prec)
753 NULLIFY (xas_tdp_env%lumo_coeffs)
754 NULLIFY (xas_tdp_env%fock_matrix)
757 xas_tdp_env%state_type_char(1) =
"1s"
758 xas_tdp_env%state_type_char(2) =
"2s"
759 xas_tdp_env%state_type_char(3) =
"2p"
773 IF (
ASSOCIATED(xas_tdp_env))
THEN
774 IF (
ASSOCIATED(xas_tdp_env%ex_atom_indices))
THEN
775 DEALLOCATE (xas_tdp_env%ex_atom_indices)
777 IF (
ASSOCIATED(xas_tdp_env%ex_kind_indices))
THEN
778 DEALLOCATE (xas_tdp_env%ex_kind_indices)
781 IF (
ASSOCIATED(xas_tdp_env%state_types))
THEN
782 DEALLOCATE (xas_tdp_env%state_types)
784 IF (
ASSOCIATED(xas_tdp_env%donor_states))
THEN
785 CALL deallocate_donor_state_set(xas_tdp_env%donor_states)
787 IF (
ASSOCIATED(xas_tdp_env%qs_loc_env))
THEN
789 DEALLOCATE (xas_tdp_env%qs_loc_env)
791 IF (
ASSOCIATED(xas_tdp_env%mos_of_ex_atoms))
THEN
792 DEALLOCATE (xas_tdp_env%mos_of_ex_atoms)
794 IF (
ASSOCIATED(xas_tdp_env%ri_inv_coul))
THEN
795 DEALLOCATE (xas_tdp_env%ri_inv_coul)
797 IF (
ASSOCIATED(xas_tdp_env%ri_inv_ex))
THEN
798 DEALLOCATE (xas_tdp_env%ri_inv_ex)
800 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_coul))
THEN
803 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_ex))
THEN
806 IF (
ASSOCIATED(xas_tdp_env%q_projector))
THEN
807 DO i = 1,
SIZE(xas_tdp_env%q_projector)
810 DEALLOCATE (xas_tdp_env%q_projector)
812 IF (
ASSOCIATED(xas_tdp_env%dipmat))
THEN
813 DO i = 1,
SIZE(xas_tdp_env%dipmat)
816 DEALLOCATE (xas_tdp_env%dipmat)
818 IF (
ASSOCIATED(xas_tdp_env%quadmat))
THEN
819 DO i = 1,
SIZE(xas_tdp_env%quadmat)
822 DEALLOCATE (xas_tdp_env%quadmat)
824 IF (
ASSOCIATED(xas_tdp_env%ri_3c_coul))
THEN
825 CALL dbt_destroy(xas_tdp_env%ri_3c_coul)
826 DEALLOCATE (xas_tdp_env%ri_3c_coul)
828 IF (
ASSOCIATED(xas_tdp_env%ri_3c_ex))
THEN
829 CALL dbt_destroy(xas_tdp_env%ri_3c_ex)
830 DEALLOCATE (xas_tdp_env%ri_3c_ex)
832 IF (
ASSOCIATED(xas_tdp_env%ri_fxc))
THEN
833 DO i = 1,
SIZE(xas_tdp_env%ri_fxc, 1)
834 DO j = 1,
SIZE(xas_tdp_env%ri_fxc, 2)
835 IF (
ASSOCIATED(xas_tdp_env%ri_fxc(i, j)%array))
THEN
836 DEALLOCATE (xas_tdp_env%ri_fxc(i, j)%array)
840 DEALLOCATE (xas_tdp_env%ri_fxc)
842 IF (
ASSOCIATED(xas_tdp_env%orb_soc))
THEN
843 DO i = 1,
SIZE(xas_tdp_env%orb_soc)
845 DEALLOCATE (xas_tdp_env%orb_soc(i)%matrix)
847 DEALLOCATE (xas_tdp_env%orb_soc)
852 IF (
ASSOCIATED(xas_tdp_env%lumo_evals))
THEN
853 DO i = 1,
SIZE(xas_tdp_env%lumo_evals)
854 DEALLOCATE (xas_tdp_env%lumo_evals(i)%array)
856 DEALLOCATE (xas_tdp_env%lumo_evals)
858 IF (
ASSOCIATED(xas_tdp_env%ot_prec))
THEN
859 DO i = 1,
SIZE(xas_tdp_env%ot_prec)
861 DEALLOCATE (xas_tdp_env%ot_prec(i)%matrix)
863 DEALLOCATE (xas_tdp_env%ot_prec)
865 IF (
ASSOCIATED(xas_tdp_env%matrix_shalf))
THEN
867 DEALLOCATE (xas_tdp_env%matrix_shalf)
868 NULLIFY (xas_tdp_env%matrix_shalf)
870 IF (
ASSOCIATED(xas_tdp_env%fock_matrix))
THEN
871 DO i = 1,
SIZE(xas_tdp_env%fock_matrix)
873 DEALLOCATE (xas_tdp_env%fock_matrix(i)%matrix)
875 DEALLOCATE (xas_tdp_env%fock_matrix)
877 IF (
ASSOCIATED(xas_tdp_env%lumo_coeffs))
THEN
879 DEALLOCATE (xas_tdp_env%lumo_coeffs)
880 NULLIFY (xas_tdp_env%lumo_coeffs)
882 DEALLOCATE (xas_tdp_env)
895 INTEGER,
INTENT(IN),
OPTIONAL :: nex_atoms, nex_kinds
897 cpassert(
ASSOCIATED(xas_tdp_env))
899 IF (
PRESENT(nex_atoms)) xas_tdp_env%nex_atoms = nex_atoms
900 IF (
PRESENT(nex_kinds)) xas_tdp_env%nex_kinds = nex_kinds
912 NULLIFY (donor_state%energy_evals)
913 NULLIFY (donor_state%gw2x_evals)
914 NULLIFY (donor_state%mo_indices)
915 NULLIFY (donor_state%sc_coeffs)
916 NULLIFY (donor_state%sf_coeffs)
917 NULLIFY (donor_state%sg_coeffs)
918 NULLIFY (donor_state%tp_coeffs)
919 NULLIFY (donor_state%gs_coeffs)
920 NULLIFY (donor_state%contract_coeffs)
921 NULLIFY (donor_state%sc_evals)
922 NULLIFY (donor_state%sf_evals)
923 NULLIFY (donor_state%sg_evals)
924 NULLIFY (donor_state%tp_evals)
925 NULLIFY (donor_state%soc_evals)
926 NULLIFY (donor_state%soc_osc_str)
927 NULLIFY (donor_state%osc_str)
928 NULLIFY (donor_state%soc_quad_osc_str)
929 NULLIFY (donor_state%quad_osc_str)
930 NULLIFY (donor_state%sc_matrix_tdp)
931 NULLIFY (donor_state%sf_matrix_tdp)
932 NULLIFY (donor_state%sg_matrix_tdp)
933 NULLIFY (donor_state%tp_matrix_tdp)
934 NULLIFY (donor_state%metric)
935 NULLIFY (donor_state%matrix_aux)
936 NULLIFY (donor_state%blk_size)
937 NULLIFY (donor_state%dbcsr_dist)
952 INTEGER,
INTENT(IN),
OPTIONAL :: at_index
953 CHARACTER(LEN=default_string_length),
OPTIONAL :: at_symbol
954 INTEGER,
INTENT(IN),
OPTIONAL :: kind_index, state_type
956 cpassert(
ASSOCIATED(donor_state))
958 IF (
PRESENT(at_index)) donor_state%at_index = at_index
959 IF (
PRESENT(kind_index)) donor_state%kind_index = kind_index
960 IF (
PRESENT(state_type)) donor_state%state_type = state_type
961 IF (
PRESENT(at_symbol)) donor_state%at_symbol = at_symbol
969 SUBROUTINE deallocate_donor_state_set(donor_state_set)
974 IF (
ASSOCIATED(donor_state_set))
THEN
975 DO i = 1,
SIZE(donor_state_set)
977 IF (
ASSOCIATED(donor_state_set(i)%sc_coeffs))
THEN
979 DEALLOCATE (donor_state_set(i)%sc_coeffs)
982 IF (
ASSOCIATED(donor_state_set(i)%sf_coeffs))
THEN
984 DEALLOCATE (donor_state_set(i)%sf_coeffs)
987 IF (
ASSOCIATED(donor_state_set(i)%sg_coeffs))
THEN
989 DEALLOCATE (donor_state_set(i)%sg_coeffs)
992 IF (
ASSOCIATED(donor_state_set(i)%tp_coeffs))
THEN
994 DEALLOCATE (donor_state_set(i)%tp_coeffs)
997 IF (
ASSOCIATED(donor_state_set(i)%gs_coeffs))
THEN
999 DEALLOCATE (donor_state_set(i)%gs_coeffs)
1002 IF (
ASSOCIATED(donor_state_set(i)%contract_coeffs))
THEN
1003 DEALLOCATE (donor_state_set(i)%contract_coeffs)
1006 IF (
ASSOCIATED(donor_state_set(i)%sc_evals))
THEN
1007 DEALLOCATE (donor_state_set(i)%sc_evals)
1010 IF (
ASSOCIATED(donor_state_set(i)%sf_evals))
THEN
1011 DEALLOCATE (donor_state_set(i)%sf_evals)
1014 IF (
ASSOCIATED(donor_state_set(i)%sg_evals))
THEN
1015 DEALLOCATE (donor_state_set(i)%sg_evals)
1018 IF (
ASSOCIATED(donor_state_set(i)%tp_evals))
THEN
1019 DEALLOCATE (donor_state_set(i)%tp_evals)
1022 IF (
ASSOCIATED(donor_state_set(i)%soc_evals))
THEN
1023 DEALLOCATE (donor_state_set(i)%soc_evals)
1026 IF (
ASSOCIATED(donor_state_set(i)%osc_str))
THEN
1027 DEALLOCATE (donor_state_set(i)%osc_str)
1030 IF (
ASSOCIATED(donor_state_set(i)%soc_osc_str))
THEN
1031 DEALLOCATE (donor_state_set(i)%soc_osc_str)
1034 IF (
ASSOCIATED(donor_state_set(i)%quad_osc_str))
THEN
1035 DEALLOCATE (donor_state_set(i)%quad_osc_str)
1038 IF (
ASSOCIATED(donor_state_set(i)%soc_quad_osc_str))
THEN
1039 DEALLOCATE (donor_state_set(i)%soc_quad_osc_str)
1042 IF (
ASSOCIATED(donor_state_set(i)%energy_evals))
THEN
1043 DEALLOCATE (donor_state_set(i)%energy_evals)
1046 IF (
ASSOCIATED(donor_state_set(i)%gw2x_evals))
THEN
1047 DEALLOCATE (donor_state_set(i)%gw2x_evals)
1050 IF (
ASSOCIATED(donor_state_set(i)%mo_indices))
THEN
1051 DEALLOCATE (donor_state_set(i)%mo_indices)
1054 IF (
ASSOCIATED(donor_state_set(i)%sc_matrix_tdp))
THEN
1056 DEALLOCATE (donor_state_set(i)%sc_matrix_tdp)
1059 IF (
ASSOCIATED(donor_state_set(i)%sf_matrix_tdp))
THEN
1061 DEALLOCATE (donor_state_set(i)%sf_matrix_tdp)
1064 IF (
ASSOCIATED(donor_state_set(i)%sg_matrix_tdp))
THEN
1066 DEALLOCATE (donor_state_set(i)%sg_matrix_tdp)
1069 IF (
ASSOCIATED(donor_state_set(i)%tp_matrix_tdp))
THEN
1071 DEALLOCATE (donor_state_set(i)%tp_matrix_tdp)
1074 IF (
ASSOCIATED(donor_state_set(i)%metric))
THEN
1075 DO j = 1,
SIZE(donor_state_set(i)%metric)
1076 IF (
ASSOCIATED(donor_state_set(i)%metric(j)%matrix))
THEN
1078 DEALLOCATE (donor_state_set(i)%metric(j)%matrix)
1081 DEALLOCATE (donor_state_set(i)%metric)
1084 IF (
ASSOCIATED(donor_state_set(i)%matrix_aux))
THEN
1086 DEALLOCATE (donor_state_set(i)%matrix_aux)
1089 IF (
ASSOCIATED(donor_state_set(i)%blk_size))
THEN
1090 DEALLOCATE (donor_state_set(i)%blk_size)
1093 IF (
ASSOCIATED(donor_state_set(i)%dbcsr_dist))
THEN
1095 DEALLOCATE (donor_state_set(i)%dbcsr_dist)
1098 DEALLOCATE (donor_state_set)
1101 END SUBROUTINE deallocate_donor_state_set
1113 IF (
ASSOCIATED(donor_state%sc_evals))
DEALLOCATE (donor_state%sc_evals)
1114 IF (
ASSOCIATED(donor_state%contract_coeffs))
DEALLOCATE (donor_state%contract_coeffs)
1115 IF (
ASSOCIATED(donor_state%sf_evals))
DEALLOCATE (donor_state%sf_evals)
1116 IF (
ASSOCIATED(donor_state%sg_evals))
DEALLOCATE (donor_state%sg_evals)
1117 IF (
ASSOCIATED(donor_state%tp_evals))
DEALLOCATE (donor_state%tp_evals)
1118 IF (
ASSOCIATED(donor_state%soc_evals))
DEALLOCATE (donor_state%soc_evals)
1119 IF (
ASSOCIATED(donor_state%osc_str))
DEALLOCATE (donor_state%osc_str)
1120 IF (
ASSOCIATED(donor_state%soc_osc_str))
DEALLOCATE (donor_state%soc_osc_str)
1121 IF (
ASSOCIATED(donor_state%quad_osc_str))
DEALLOCATE (donor_state%quad_osc_str)
1122 IF (
ASSOCIATED(donor_state%soc_quad_osc_str))
DEALLOCATE (donor_state%soc_quad_osc_str)
1123 IF (
ASSOCIATED(donor_state%gs_coeffs))
THEN
1125 DEALLOCATE (donor_state%gs_coeffs)
1126 NULLIFY (donor_state%gs_coeffs)
1128 IF (
ASSOCIATED(donor_state%blk_size))
DEALLOCATE (donor_state%blk_size)
1130 IF (
ASSOCIATED(donor_state%sc_coeffs))
THEN
1132 DEALLOCATE (donor_state%sc_coeffs)
1133 NULLIFY (donor_state%sc_coeffs)
1136 IF (
ASSOCIATED(donor_state%sf_coeffs))
THEN
1138 DEALLOCATE (donor_state%sf_coeffs)
1139 NULLIFY (donor_state%sf_coeffs)
1142 IF (
ASSOCIATED(donor_state%sg_coeffs))
THEN
1144 DEALLOCATE (donor_state%sg_coeffs)
1145 NULLIFY (donor_state%sg_coeffs)
1148 IF (
ASSOCIATED(donor_state%tp_coeffs))
THEN
1150 DEALLOCATE (donor_state%tp_coeffs)
1151 NULLIFY (donor_state%tp_coeffs)
1154 IF (
ASSOCIATED(donor_state%sc_matrix_tdp))
THEN
1156 DEALLOCATE (donor_state%sc_matrix_tdp)
1159 IF (
ASSOCIATED(donor_state%sf_matrix_tdp))
THEN
1161 DEALLOCATE (donor_state%sf_matrix_tdp)
1164 IF (
ASSOCIATED(donor_state%sg_matrix_tdp))
THEN
1166 DEALLOCATE (donor_state%sg_matrix_tdp)
1169 IF (
ASSOCIATED(donor_state%tp_matrix_tdp))
THEN
1171 DEALLOCATE (donor_state%tp_matrix_tdp)
1174 IF (
ASSOCIATED(donor_state%metric))
THEN
1175 DO i = 1,
SIZE(donor_state%metric)
1176 IF (
ASSOCIATED(donor_state%metric(i)%matrix))
THEN
1178 DEALLOCATE (donor_state%metric(i)%matrix)
1181 DEALLOCATE (donor_state%metric)
1184 IF (
ASSOCIATED(donor_state%matrix_aux))
THEN
1186 DEALLOCATE (donor_state%matrix_aux)
1189 IF (
ASSOCIATED(donor_state%dbcsr_dist))
THEN
1191 DEALLOCATE (donor_state%dbcsr_dist)
1204 ALLOCATE (xas_atom_env)
1206 xas_atom_env%nspins = 1
1207 xas_atom_env%ri_radius = 0.0_dp
1208 NULLIFY (xas_atom_env%excited_atoms)
1209 NULLIFY (xas_atom_env%excited_kinds)
1210 NULLIFY (xas_atom_env%grid_atom_set)
1211 NULLIFY (xas_atom_env%harmonics_atom_set)
1212 NULLIFY (xas_atom_env%ri_dcoeff)
1213 NULLIFY (xas_atom_env%ri_sphi_so)
1214 NULLIFY (xas_atom_env%orb_sphi_so)
1215 NULLIFY (xas_atom_env%exat_neighbors)
1216 NULLIFY (xas_atom_env%gr)
1217 NULLIFY (xas_atom_env%ga)
1218 NULLIFY (xas_atom_env%dgr1)
1219 NULLIFY (xas_atom_env%dgr2)
1220 NULLIFY (xas_atom_env%dga1)
1221 NULLIFY (xas_atom_env%dga2)
1235 IF (
ASSOCIATED(xas_atom_env%grid_atom_set))
THEN
1236 DO i = 1,
SIZE(xas_atom_env%grid_atom_set)
1237 IF (
ASSOCIATED(xas_atom_env%grid_atom_set(i)%grid_atom))
THEN
1241 DEALLOCATE (xas_atom_env%grid_atom_set)
1244 IF (
ASSOCIATED(xas_atom_env%harmonics_atom_set))
THEN
1245 DO i = 1,
SIZE(xas_atom_env%harmonics_atom_set)
1246 IF (
ASSOCIATED(xas_atom_env%harmonics_atom_set(i)%harmonics_atom))
THEN
1250 DEALLOCATE (xas_atom_env%harmonics_atom_set)
1256 IF (
ASSOCIATED(xas_atom_env%ri_dcoeff))
THEN
1257 DO i = 1,
SIZE(xas_atom_env%ri_dcoeff, 1)
1258 DO j = 1,
SIZE(xas_atom_env%ri_dcoeff, 2)
1259 DO k = 1,
SIZE(xas_atom_env%ri_dcoeff, 3)
1260 IF (
ASSOCIATED(xas_atom_env%ri_dcoeff(i, j, k)%array))
THEN
1261 DEALLOCATE (xas_atom_env%ri_dcoeff(i, j, k)%array)
1266 DEALLOCATE (xas_atom_env%ri_dcoeff)
1269 IF (
ASSOCIATED(xas_atom_env%ri_sphi_so))
THEN
1270 DO i = 1,
SIZE(xas_atom_env%ri_sphi_so)
1271 IF (
ASSOCIATED(xas_atom_env%ri_sphi_so(i)%array))
THEN
1272 DEALLOCATE (xas_atom_env%ri_sphi_so(i)%array)
1275 DEALLOCATE (xas_atom_env%ri_sphi_so)
1278 IF (
ASSOCIATED(xas_atom_env%exat_neighbors))
THEN
1279 DO i = 1,
SIZE(xas_atom_env%exat_neighbors)
1280 IF (
ASSOCIATED(xas_atom_env%exat_neighbors(i)%array))
THEN
1281 DEALLOCATE (xas_atom_env%exat_neighbors(i)%array)
1284 DEALLOCATE (xas_atom_env%exat_neighbors)
1287 IF (
ASSOCIATED(xas_atom_env%gr))
THEN
1288 DO i = 1,
SIZE(xas_atom_env%gr)
1289 IF (
ASSOCIATED(xas_atom_env%gr(i)%array))
THEN
1290 DEALLOCATE (xas_atom_env%gr(i)%array)
1293 DEALLOCATE (xas_atom_env%gr)
1296 IF (
ASSOCIATED(xas_atom_env%ga))
THEN
1297 DO i = 1,
SIZE(xas_atom_env%ga)
1298 IF (
ASSOCIATED(xas_atom_env%ga(i)%array))
THEN
1299 DEALLOCATE (xas_atom_env%ga(i)%array)
1302 DEALLOCATE (xas_atom_env%ga)
1305 IF (
ASSOCIATED(xas_atom_env%dgr1))
THEN
1306 DO i = 1,
SIZE(xas_atom_env%dgr1)
1307 IF (
ASSOCIATED(xas_atom_env%dgr1(i)%array))
THEN
1308 DEALLOCATE (xas_atom_env%dgr1(i)%array)
1311 DEALLOCATE (xas_atom_env%dgr1)
1314 IF (
ASSOCIATED(xas_atom_env%dgr2))
THEN
1315 DO i = 1,
SIZE(xas_atom_env%dgr2)
1316 IF (
ASSOCIATED(xas_atom_env%dgr2(i)%array))
THEN
1317 DEALLOCATE (xas_atom_env%dgr2(i)%array)
1320 DEALLOCATE (xas_atom_env%dgr2)
1323 IF (
ASSOCIATED(xas_atom_env%dga1))
THEN
1324 DO i = 1,
SIZE(xas_atom_env%dga1)
1325 IF (
ASSOCIATED(xas_atom_env%dga1(i)%array))
THEN
1326 DEALLOCATE (xas_atom_env%dga1(i)%array)
1329 DEALLOCATE (xas_atom_env%dga1)
1332 IF (
ASSOCIATED(xas_atom_env%dga2))
THEN
1333 DO i = 1,
SIZE(xas_atom_env%dga2)
1334 IF (
ASSOCIATED(xas_atom_env%dga2(i)%array))
THEN
1335 DEALLOCATE (xas_atom_env%dga2(i)%array)
1338 DEALLOCATE (xas_atom_env%dga2)
1341 IF (
ASSOCIATED(xas_atom_env%orb_sphi_so))
THEN
1342 DO i = 1,
SIZE(xas_atom_env%orb_sphi_so)
1343 IF (
ASSOCIATED(xas_atom_env%orb_sphi_so(i)%array))
THEN
1344 DEALLOCATE (xas_atom_env%orb_sphi_so(i)%array)
1347 DEALLOCATE (xas_atom_env%orb_sphi_so)
1353 DEALLOCATE (xas_atom_env)
1367 INTEGER,
INTENT(IN) ::
atom
1368 LOGICAL :: end_of_batch
1372 IF (
ASSOCIATED(xas_tdp_env%ri_fxc))
THEN
1373 DO i = 1,
SIZE(xas_tdp_env%ri_fxc, 2)
1374 IF (
ASSOCIATED(xas_tdp_env%ri_fxc(
atom, i)%array))
THEN
1375 DEALLOCATE (xas_tdp_env%ri_fxc(
atom, i)%array)
1380 IF (end_of_batch)
THEN
1381 IF (
ASSOCIATED(xas_tdp_env%opt_dist2d_ex))
THEN
1385 IF (
ASSOCIATED(xas_tdp_env%ri_3c_ex))
THEN
1386 CALL dbt_destroy(xas_tdp_env%ri_3c_ex)
1387 DEALLOCATE (xas_tdp_env%ri_3c_ex)
1391 xas_tdp_env%fxc_avail = .false.
1405 CALL batch_info%para_env%free()
1407 IF (
ASSOCIATED(batch_info%so_proc_info))
THEN
1408 DO i = 1,
SIZE(batch_info%so_proc_info)
1409 IF (
ASSOCIATED(batch_info%so_proc_info(i)%array))
THEN
1410 DEALLOCATE (batch_info%so_proc_info(i)%array)
1413 DEALLOCATE (batch_info%so_proc_info)
1428 INTEGER,
INTENT(OUT) :: batch_size, nbatch
1429 INTEGER,
INTENT(IN) :: nex_atom, nprocs
1431 INTEGER :: rest, test_size
1435 IF (nex_atom >= nprocs)
THEN
1440 DO test_size = 1, min(nprocs, 4)
1441 nbatch = nprocs/test_size
1442 IF (
modulo(nex_atom, nbatch) < rest)
THEN
1443 rest =
modulo(nex_atom, nbatch)
1444 batch_size = test_size
1447 nbatch = nprocs/batch_size
1455 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.