24 dbcsr_type_no_symmetry,&
82#include "./base/base_uses.f90"
92 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_dcdr_utils'
94 REAL(dp),
DIMENSION(3, 3, 3),
PARAMETER :: Levi_Civita = reshape([ &
95 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, -1.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, &
96 0.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, -1.0_dp, 0.0_dp, 0.0_dp, &
97 0.0_dp, -1.0_dp, 0.0_dp, 1.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp, 0.0_dp], &
113 TYPE(
dbcsr_type),
INTENT(IN),
POINTER :: ao_matrix
116 INTEGER,
INTENT(IN) :: nmo, icenter
119 CHARACTER(LEN=*),
PARAMETER :: routinen =
'multiply_localization'
123 CALL timeset(routinen, handle)
134 CALL timestop(handle)
151 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
152 INTEGER,
INTENT(IN) :: lambda, beta
153 CHARACTER(LEN=*) :: tag
155 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dcdr_read_restart'
157 CHARACTER(LEN=default_path_length) :: filename
158 CHARACTER(LEN=default_string_length) :: my_middle
159 INTEGER :: beta_tmp, handle, i, i_block, ia, ie, iostat, iounit, ispin, j, lambda_tmp, &
160 max_block, n_rep_val, nao, nao_tmp, nmo, nmo_tmp, nspins, nspins_tmp, rst_unit
162 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
171 CALL timeset(routinen, handle)
173 NULLIFY (mos, para_env, logger, print_key, vecbuffer)
177 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
186 IF (para_env%is_source())
THEN
191 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
194 IF (n_rep_val > 0)
THEN
197 filename = filename(ia:ie)//trim(my_middle)//
".lr"
202 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
208 CALL open_file(file_name=trim(filename), &
209 file_action=
"READ", &
210 file_form=
"UNFORMATTED", &
211 file_position=
"REWIND", &
213 unit_number=rst_unit)
215 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
216 "LINRES| Reading response wavefunctions from the restart file <"//trim(adjustl(filename))//
">"
218 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
219 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
228 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
230 ALLOCATE (vecbuffer(nao, max_block))
234 IF (rst_unit > 0)
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
235 CALL para_env%bcast(iostat)
236 CALL para_env%bcast(beta_tmp)
237 CALL para_env%bcast(lambda_tmp)
238 CALL para_env%bcast(nspins_tmp)
239 CALL para_env%bcast(nao_tmp)
243 IF (nspins_tmp /= nspins)
THEN
244 cpabort(
"nspins not consistent")
246 IF (nao_tmp /= nao) cpabort(
"nao not consistent")
249 IF (lambda_tmp /= lambda) cpabort(
"lambda not consistent")
250 IF (beta_tmp /= beta) cpabort(
"beta not consistent")
253 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
256 IF (rst_unit > 0)
READ (rst_unit) nmo_tmp
257 CALL para_env%bcast(nmo_tmp)
258 IF (nmo_tmp /= nmo) cpabort(
"nmo not consistent")
261 DO i = 1, nmo, max(max_block, 1)
262 i_block = min(max_block, nmo - i + 1)
264 IF (rst_unit > 0)
READ (rst_unit) vecbuffer(1:nao, j)
266 CALL para_env%bcast(vecbuffer)
271 IF (iostat /= 0)
THEN
272 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
273 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
276 DEALLOCATE (vecbuffer)
280 IF (para_env%is_source())
THEN
284 CALL timestop(handle)
302 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
303 INTEGER,
INTENT(IN) :: lambda, beta
304 CHARACTER(LEN=*) :: tag
306 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dcdr_write_restart'
308 CHARACTER(LEN=default_path_length) :: filename
309 CHARACTER(LEN=default_string_length) :: my_middle, my_pos, my_status
310 INTEGER :: handle, i, i_block, ia, ie, iounit, &
311 ispin, j, max_block, nao, nmo, nspins, &
313 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
320 NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
322 CALL timeset(routinen, handle)
327 used_print_key=print_key), &
331 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
339 my_status =
"REPLACE"
342 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
345 extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
346 file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
349 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
352 WRITE (unit=iounit, fmt=
"(T2,A)") &
353 "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">"
360 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
361 ALLOCATE (vecbuffer(nao, max_block))
363 IF (rst_unit > 0)
WRITE (rst_unit) lambda, beta, nspins, nao
368 IF (rst_unit > 0)
WRITE (rst_unit) nmo
370 DO i = 1, nmo, max(max_block, 1)
371 i_block = min(max_block, nmo - i + 1)
377 IF (rst_unit > 0)
WRITE (rst_unit) vecbuffer(1:nao, j)
382 DEALLOCATE (vecbuffer)
388 CALL timestop(handle)
402 CHARACTER(LEN=default_string_length) :: description
403 INTEGER :: alpha, beta, delta,
gamma, i, k, l, &
404 lambda, natom, nsubset, output_unit
405 REAL(dp),
DIMENSION(:, :, :),
POINTER :: apt_el_dcdr, apt_nuc_dcdr, apt_total_dcdr
406 REAL(dp),
DIMENSION(:, :, :, :),
POINTER :: apt_center_dcdr, apt_subset_dcdr
407 REAL(kind=dp),
DIMENSION(3, 3) :: sum_rule_0, sum_rule_1, sum_rule_2
421 NULLIFY (particle_set)
422 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
423 natom =
SIZE(particle_set)
424 nsubset =
SIZE(molecule_set)
426 apt_el_dcdr => dcdr_env%apt_el_dcdr
427 apt_nuc_dcdr => dcdr_env%apt_nuc_dcdr
428 apt_total_dcdr => dcdr_env%apt_total_dcdr
429 apt_subset_dcdr => dcdr_env%apt_el_dcdr_per_subset
430 apt_center_dcdr => dcdr_env%apt_el_dcdr_per_center
432 IF (dcdr_env%localized_psi0)
THEN
433 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | Write the final apt matrix per atom per subset'
436 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, *)
'APT | Subset', l
438 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,I3,F15.6,F15.6,F15.6)") &
439 'APT | apt_subset ', i, apt_subset_dcdr(i, :, k, l)
445 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)") &
446 'APT | Write the final apt matrix per atom (Position perturbation)'
448 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,I3,A,F15.6)") &
449 'APT | Atom', l,
' - GAPT ', &
450 (apt_total_dcdr(1, 1, l) &
451 + apt_total_dcdr(2, 2, l) &
452 + apt_total_dcdr(3, 3, l))/3._dp
454 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,F15.6,F15.6,F15.6)")
"APT | ", apt_total_dcdr(i, :, l)
458 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | Write the total apt matrix'
460 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, &
461 "(A,F15.6,F15.6,F15.6)")
"APT | ", sum(apt_total_dcdr(i, :, :), dim=2)
463 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | End Write the final apt matrix'
467 description =
"[DIPOLE]"
468 CALL get_results(results=results, description=description, values=dcdr_env%dipole_pos(1:3))
479 sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
480 + apt_total_dcdr(alpha, beta, lambda)
485 sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
486 + levi_civita(alpha, beta,
gamma)*dcdr_env%dipole_pos(
gamma)
493 sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
494 + levi_civita(beta,
gamma, delta) &
495 *particle_set(lambda)%r(
gamma) &
496 *apt_total_dcdr(delta, alpha, lambda)
504 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
"APT | Position perturbation sum rules"
505 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,T18,A,T34,A,T49,A)") &
506 "APT |",
"Total APT",
"Dipole",
"R * APT"
509 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, &
510 "(A,I3,I3,F15.6,F15.6,F15.6)") &
513 sum_rule_0(alpha, beta), &
514 sum_rule_1(alpha, beta), &
515 sum_rule_2(alpha, beta)
528 REAL(dp),
DIMENSION(3),
INTENT(in) :: r
529 TYPE(
cell_type),
INTENT(in),
POINTER :: cell
530 REAL(dp),
DIMENSION(3),
INTENT(out) :: r_shifted
533 REAL(kind=dp),
DIMENSION(3) :: abc
539 IF (r(i) < 0._dp)
THEN
540 r_shifted(i) = r(i) + abc(i)
541 ELSE IF (r(i) > abc(i))
THEN
542 r_shifted(i) = r(i) - abc(i)
558 CHARACTER(LEN=*),
PARAMETER :: routinen =
'get_loc_setting'
560 INTEGER :: handle, is, ispin, istate, max_states, &
561 nmo, nmoloc, nstate, nstate_list(2)
562 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: state_list
563 REAL(dp),
DIMENSION(:, :),
POINTER :: center_array
570 CALL timeset(routinen, handle)
573 linres_control=linres_control, &
579 max_states = max(max_states, nmo)
582 nmoloc =
SIZE(linres_control%qs_loc_env%localized_wfn_control%centers_set(1)%array, 2)
583 IF (nmoloc /= nmo)
THEN
584 cpabort(
"The number of localized functions is not equal to the number of states.")
590 SELECT CASE (dcdr_env%orb_center)
592 dcdr_env%orb_center_name =
"WANNIER"
597 qs_loc_env => linres_control%qs_loc_env
598 CALL get_qs_loc_env(qs_loc_env, localized_wfn_control=localized_wfn_control)
600 ALLOCATE (dcdr_env%centers_set(dcdr_env%nspins))
601 ALLOCATE (dcdr_env%center_list(dcdr_env%nspins))
602 ALLOCATE (state_list(max_states, dcdr_env%nspins))
603 state_list(:, :) = huge(0)
604 nstate_list(:) = huge(0)
607 DO ispin = 1, dcdr_env%nspins
608 center_array => localized_wfn_control%centers_set(ispin)%array
610 DO istate = 1,
SIZE(center_array, 2)
612 state_list(nstate, ispin) = istate
614 nstate_list(ispin) = nstate
617 nstate = nstate_list(ispin)
618 dcdr_env%nstates(ispin) = nstate
620 ALLOCATE (dcdr_env%center_list(ispin)%array(2, nstate + 1))
621 ALLOCATE (dcdr_env%centers_set(ispin)%array(3, nstate))
622 dcdr_env%center_list(ispin)%array(:, :) = huge(0)
623 dcdr_env%centers_set(ispin)%array(:, :) = huge(0.0_dp)
625 center_array => localized_wfn_control%centers_set(ispin)%array
628 SELECT CASE (dcdr_env%orb_center)
631 dcdr_env%nbr_center(ispin) = nstate
633 istate = state_list(is, 1)
634 dcdr_env%centers_set(ispin)%array(1:3, is) = center_array(1:3, istate)
635 dcdr_env%center_list(ispin)%array(1, is) = is
636 dcdr_env%center_list(ispin)%array(2, is) = istate
638 dcdr_env%center_list(ispin)%array(1, nstate + 1) = nstate + 1
641 cpabort(
"Unknown orbital center...")
645 CALL timestop(handle)
657 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dcdr_env_init'
659 INTEGER :: handle, homo, i, isize, ispin, j, jg, &
660 n_rep, nao, natom, nmo, nspins, &
661 nsubset, output_unit, reference, &
663 INTEGER,
DIMENSION(:),
POINTER :: tmplist
665 REAL(kind=dp),
DIMENSION(:),
POINTER :: ref_point
669 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
670 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
676 POINTER :: sab_all, sab_orb
681 CALL timeset(routinen, handle)
684 NULLIFY (logger, loc_section, dcdr_section, lr_section)
689 extension=
".data", middle_name=
"dcdr", log_filename=.false., &
690 file_position=
"REWIND", file_status=
"REPLACE")
694 extension=
".linresLog")
695 unit_number =
cp_print_key_unit_nr(logger, lr_section,
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
697 IF (output_unit > 0)
THEN
698 WRITE (output_unit,
"(/,T20,A,/)")
"*** Start DCDR calculation ***"
701 NULLIFY (ks_env, dft_control, sab_orb, sab_all, particle_set, molecule_set, matrix_s, matrix_ks, mos, para_env)
704 dft_control=dft_control, &
707 particle_set=particle_set, &
708 molecule_set=molecule_set, &
710 matrix_ks=matrix_ks, &
714 natom =
SIZE(particle_set)
715 nsubset =
SIZE(molecule_set)
716 nspins = dft_control%nspins
717 dcdr_env%nspins = dft_control%nspins
719 NULLIFY (dcdr_env%matrix_s)
721 matrix_name=
"OVERLAP MATRIX", &
723 basis_type_a=
"ORB", &
724 basis_type_b=
"ORB", &
727 NULLIFY (dcdr_env%matrix_t)
730 matrix_name=
"KINETIC ENERGY MATRIX", &
731 calculate_forces=.false., &
735 eps_filter=dft_control%qs_control%eps_filter_matrix)
744 CALL section_vals_val_get(dcdr_section,
"DISTRIBUTED_ORIGIN", l_val=dcdr_env%distributed_origin)
749 dcdr_env%ref_point = 0._dp
756 ALLOCATE (dcdr_env%list_of_atoms(natom))
758 dcdr_env%list_of_atoms(jg) = jg
762 ALLOCATE (dcdr_env%list_of_atoms(isize))
764 CALL reallocate(dcdr_env%list_of_atoms, 1, isize +
SIZE(tmplist))
765 dcdr_env%list_of_atoms(isize + 1:isize +
SIZE(tmplist)) = tmplist
766 isize =
SIZE(dcdr_env%list_of_atoms)
771 IF (dcdr_env%localized_psi0)
THEN
782 cpabort(
"User-defined reference point should be given explicitly")
787 reference=reference, &
792 NULLIFY (dcdr_env%aoao_fm_struct, &
793 dcdr_env%momo_fm_struct, &
794 dcdr_env%likemos_fm_struct, &
795 dcdr_env%homohomo_fm_struct)
796 CALL get_mo_set(mo_set=mos(1), mo_coeff=mo_coeff, &
797 nao=nao, nmo=nmo, homo=homo)
799 ncol_global=nao, para_env=para_env, &
800 context=mo_coeff%matrix_struct%context)
802 ncol_global=homo, para_env=para_env, &
803 context=mo_coeff%matrix_struct%context)
806 ALLOCATE (dcdr_env%nmo(nspins))
807 ALLOCATE (dcdr_env%momo_fm_struct(nspins))
808 ALLOCATE (dcdr_env%likemos_fm_struct(nspins))
810 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, &
811 nao=nao, nmo=nmo, homo=homo)
813 ncol_global=nmo, para_env=para_env, &
814 context=mo_coeff%matrix_struct%context)
816 template_fmstruct=mo_coeff%matrix_struct)
817 dcdr_env%nmo(ispin) = nmo
821 ALLOCATE (dcdr_env%deltaR(3, natom))
822 ALLOCATE (dcdr_env%delta_basis_function(3, natom))
823 ALLOCATE (dcdr_env%apt_el_dcdr(3, 3, natom))
824 ALLOCATE (dcdr_env%apt_nuc_dcdr(3, 3, natom))
825 ALLOCATE (dcdr_env%apt_total_dcdr(3, 3, natom))
827 dcdr_env%apt_el_dcdr = 0._dp
828 dcdr_env%apt_nuc_dcdr = 0._dp
829 dcdr_env%apt_total_dcdr = 0._dp
831 dcdr_env%deltaR = 0.0_dp
832 dcdr_env%delta_basis_function = 0._dp
835 IF (dcdr_env%localized_psi0)
THEN
836 ALLOCATE (dcdr_env%apt_el_dcdr_per_center(3, 3, natom, dcdr_env%nbr_center(1)))
837 ALLOCATE (dcdr_env%apt_el_dcdr_per_subset(3, 3, natom, nsubset))
838 ALLOCATE (dcdr_env%apt_subset(3, 3, natom, nsubset))
839 dcdr_env%apt_el_dcdr_per_center = 0._dp
840 dcdr_env%apt_el_dcdr_per_subset = 0._dp
841 dcdr_env%apt_subset = 0.0_dp
845 ALLOCATE (dcdr_env%mo_coeff(nspins))
846 ALLOCATE (dcdr_env%dCR(nspins))
847 ALLOCATE (dcdr_env%dCR_prime(nspins))
848 ALLOCATE (dcdr_env%chc(nspins))
849 ALLOCATE (dcdr_env%op_dR(nspins))
852 CALL cp_fm_create(dcdr_env%dCR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
853 CALL cp_fm_create(dcdr_env%dCR_prime(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
854 CALL cp_fm_create(dcdr_env%mo_coeff(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
855 CALL cp_fm_create(dcdr_env%chc(ispin), dcdr_env%momo_fm_struct(ispin)%struct, set_zero=.true.)
856 CALL cp_fm_create(dcdr_env%op_dR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
858 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff)
859 CALL cp_fm_to_fm(mo_coeff, dcdr_env%mo_coeff(ispin))
862 IF (dcdr_env%z_matrix_method)
THEN
863 ALLOCATE (dcdr_env%matrix_m_alpha(3, nspins))
866 CALL cp_fm_create(dcdr_env%matrix_m_alpha(i, ispin), dcdr_env%likemos_fm_struct(1)%struct)
867 CALL cp_fm_set_all(dcdr_env%matrix_m_alpha(i, ispin), 0.0_dp)
873 NULLIFY (dcdr_env%hamiltonian1)
874 NULLIFY (dcdr_env%moments)
875 NULLIFY (dcdr_env%matrix_difdip)
876 NULLIFY (dcdr_env%matrix_core_charge_1)
877 NULLIFY (dcdr_env%matrix_s1)
878 NULLIFY (dcdr_env%matrix_t1)
879 NULLIFY (dcdr_env%matrix_apply_op_constant)
880 NULLIFY (dcdr_env%matrix_d_vhxc_dR)
881 NULLIFY (dcdr_env%matrix_vhxc_perturbed_basis)
882 NULLIFY (dcdr_env%matrix_hc)
883 NULLIFY (dcdr_env%matrix_ppnl_1)
902 CALL dbcsr_create(dcdr_env%matrix_nosym_temp(i)%matrix, template=matrix_ks(1)%matrix, &
903 matrix_type=dbcsr_type_no_symmetry)
905 CALL dbcsr_set(dcdr_env%matrix_nosym_temp(i)%matrix, 0._dp)
907 CALL dbcsr_init_p(dcdr_env%matrix_nosym_temp2(i)%matrix)
908 CALL dbcsr_create(dcdr_env%matrix_nosym_temp2(i)%matrix, template=matrix_ks(1)%matrix, &
909 matrix_type=dbcsr_type_no_symmetry)
911 CALL dbcsr_set(dcdr_env%matrix_nosym_temp2(i)%matrix, 0._dp)
917 CALL dbcsr_copy(dcdr_env%moments(i)%matrix, matrix_ks(1)%matrix,
"dcdr_env%moments")
918 CALL dbcsr_set(dcdr_env%moments(i)%matrix, 0.0_dp)
925 CALL dbcsr_copy(dcdr_env%matrix_difdip(i, j)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
926 CALL dbcsr_set(dcdr_env%matrix_difdip(i, j)%matrix, 0.0_dp)
932 CALL dbcsr_init_p(dcdr_env%perturbed_dm_correction(ispin)%matrix)
933 CALL dbcsr_init_p(dcdr_env%matrix_apply_op_constant(ispin)%matrix)
934 CALL dbcsr_copy(dcdr_env%matrix_apply_op_constant(ispin)%matrix, matrix_ks(1)%matrix)
935 CALL dbcsr_copy(dcdr_env%perturbed_dm_correction(ispin)%matrix, matrix_ks(1)%matrix)
943 CALL dbcsr_copy(dcdr_env%matrix_s1(1)%matrix, matrix_s(1)%matrix)
944 CALL dbcsr_copy(dcdr_env%matrix_t1(1)%matrix, dcdr_env%matrix_t(1)%matrix)
948 CALL dbcsr_copy(dcdr_env%matrix_s1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
951 CALL dbcsr_copy(dcdr_env%matrix_t1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
957 CALL dbcsr_init_p(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix)
958 CALL dbcsr_copy(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix, dcdr_env%matrix_s1(1)%matrix)
964 CALL dbcsr_create(dcdr_env%matrix_hc(i)%matrix, template=matrix_ks(1)%matrix, &
965 matrix_type=dbcsr_type_symmetric)
967 CALL dbcsr_set(dcdr_env%matrix_hc(i)%matrix, 0.0_dp)
972 CALL dbcsr_create(dcdr_env%matrix_ppnl_1(i)%matrix, template=matrix_ks(1)%matrix, &
973 matrix_type=dbcsr_type_symmetric)
975 CALL dbcsr_set(dcdr_env%matrix_ppnl_1(i)%matrix, 0.0_dp)
980 CALL dbcsr_init_p(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix)
981 CALL dbcsr_copy(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix, dcdr_env%matrix_s1(1)%matrix)
984 CALL dbcsr_init_p(dcdr_env%matrix_core_charge_1(i)%matrix)
985 CALL dbcsr_copy(dcdr_env%matrix_core_charge_1(i)%matrix, dcdr_env%matrix_s1(1)%matrix)
986 CALL dbcsr_set(dcdr_env%matrix_core_charge_1(i)%matrix, 0.0_dp)
991 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
992 CALL cp_fm_create(buf, dcdr_env%likemos_fm_struct(ispin)%struct)
997 1.0_dp, mo_coeff, buf, &
998 0.0_dp, dcdr_env%chc(ispin))
1004 "PRINT%PROGRAM_RUN_INFO")
1006 CALL timestop(handle)
1028 DEALLOCATE (dcdr_env%list_of_atoms)
1032 DO ispin = 1, dcdr_env%nspins
1036 DEALLOCATE (dcdr_env%momo_fm_struct)
1037 DEALLOCATE (dcdr_env%likemos_fm_struct)
1039 DEALLOCATE (dcdr_env%deltar)
1040 DEALLOCATE (dcdr_env%delta_basis_function)
1042 IF (dcdr_env%localized_psi0)
THEN
1044 DEALLOCATE (dcdr_env%centers_set(1)%array)
1045 DEALLOCATE (dcdr_env%center_list(1)%array)
1046 DEALLOCATE (dcdr_env%centers_set)
1047 DEALLOCATE (dcdr_env%center_list)
1048 DEALLOCATE (dcdr_env%apt_subset)
1051 DEALLOCATE (dcdr_env%apt_el_dcdr)
1052 DEALLOCATE (dcdr_env%apt_nuc_dcdr)
1053 DEALLOCATE (dcdr_env%apt_total_dcdr)
1054 IF (dcdr_env%localized_psi0)
THEN
1055 DEALLOCATE (dcdr_env%apt_el_dcdr_per_center)
1056 DEALLOCATE (dcdr_env%apt_el_dcdr_per_subset)
1066 IF (dcdr_env%z_matrix_method)
THEN
Handles all functions related to the CELL.
subroutine, public get_cell(cell, alpha, beta, gamma, deth, orthorhombic, abc, periodic, h, h_inv, symmetry_id, tag)
Get informations about a simulation cell.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_init_p(matrix)
...
subroutine, public dbcsr_set(matrix, alpha)
...
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_sm_fm_multiply(matrix, fm_in, fm_out, ncol, alpha, beta)
multiply a dbcsr with a fm matrix
Utility routines to open and close files. Tracking of preconnections.
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
logical function, public file_exists(file_name)
Checks if file exists, considering also the file discovery mechanism.
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_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_set_submatrix(fm, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
sets a submatrix of a full matrix fm(start_row:start_row+n_rows,start_col:start_col+n_cols) = alpha*o...
subroutine, public cp_fm_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
subroutine, public cp_fm_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
gets a submatrix of a full matrix op(target_m)(1:n_rows,1:n_cols) =fm(start_row:start_row+n_rows,...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
character(len=default_path_length) function, public cp_print_key_generate_filename(logger, print_key, middle_name, extension, my_local)
Utility function that returns a unit number to write the print key. Might open a file with a unique f...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
set of type/routines to handle the storage of results in force_envs
set of type/routines to handle the storage of results in force_envs
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Utility routines for the memory handling.
Interface to the message passing library MPI.
Define the data structure for the molecule information.
Calculates the moment integrals <a|r^m|b>
subroutine, public get_reference_point(rpoint, drpoint, qs_env, fist_env, reference, ref_point, ifirst, ilast)
...
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public kinetic_energy_matrix(qs_env, matrixkp_t, matrix_t, matrix_p, ext_kpoints, matrix_name, calculate_forces, nderivative, sab_orb, eps_filter, basis_type, debug_forces, debug_stress)
Calculate kinetic energy matrix and possible relativistic correction.
Calculate the derivatives of the MO coefficients wrt nuclear coordinates.
subroutine, public dcdr_env_cleanup(qs_env, dcdr_env)
Deallocate the dcdr environment.
subroutine, public multiply_localization(ao_matrix, mo_coeff, work, nmo, icenter, res)
Multiply (ao_matrix @ mo_coeff) and store the column icenter in res.
subroutine, public dcdr_print(dcdr_env, qs_env)
Print the APT and sum rules.
subroutine, public dcdr_read_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_read_restart.
subroutine, public shift_wannier_into_cell(r, cell, r_shifted)
...
subroutine, public get_loc_setting(dcdr_env, qs_env)
...
subroutine, public dcdr_write_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_write_restart.
subroutine, public dcdr_env_init(dcdr_env, qs_env)
Initialize the dcdr environment.
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.
Type definitiona for linear response calculations.
New version of the module for the localization of the molecular orbitals This should be able to use d...
subroutine, public get_qs_loc_env(qs_loc_env, cell, local_molecules, localized_wfn_control, moloc_coeff, op_sm_set, op_fm_set, para_env, particle_set, weights, dim_op)
...
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Calculates the moment integrals <a|r^m|b> and <a|r x d/dr|b>
subroutine, public build_local_moment_matrix(qs_env, moments, nmoments, ref_point, ref_points, basis_type)
...
Define the neighbor list data types and the corresponding functionality.
Calculation of overlap matrix, its derivatives and forces.
subroutine, public build_overlap_matrix(ks_env, matrix_s, matrixkp_s, matrix_name, nderivative, basis_type_a, basis_type_b, sab_nl, calculate_forces, matrix_p, matrixkp_p, ext_kpoints)
Calculation of the overlap matrix over Cartesian Gaussian functions.
Utilities for string manipulations.
elemental subroutine, public xstring(string, ia, ib)
...
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
contains arbitrary information which need to be stored
stores all the informations relevant to an mpi environment
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
General settings for linear response calculations.
A type that holds controlling information for the calculation of the spread of wfn and the optimizati...
contains all the info needed by quickstep to calculate the spread of a selected set of orbitals and i...