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")
786 reference=reference, &
791 NULLIFY (dcdr_env%aoao_fm_struct, &
792 dcdr_env%momo_fm_struct, &
793 dcdr_env%likemos_fm_struct, &
794 dcdr_env%homohomo_fm_struct)
795 CALL get_mo_set(mo_set=mos(1), mo_coeff=mo_coeff, &
796 nao=nao, nmo=nmo, homo=homo)
798 ncol_global=nao, para_env=para_env, &
799 context=mo_coeff%matrix_struct%context)
801 ncol_global=homo, para_env=para_env, &
802 context=mo_coeff%matrix_struct%context)
805 ALLOCATE (dcdr_env%nmo(nspins))
806 ALLOCATE (dcdr_env%momo_fm_struct(nspins))
807 ALLOCATE (dcdr_env%likemos_fm_struct(nspins))
809 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, &
810 nao=nao, nmo=nmo, homo=homo)
812 ncol_global=nmo, para_env=para_env, &
813 context=mo_coeff%matrix_struct%context)
815 template_fmstruct=mo_coeff%matrix_struct)
816 dcdr_env%nmo(ispin) = nmo
820 ALLOCATE (dcdr_env%deltaR(3, natom))
821 ALLOCATE (dcdr_env%delta_basis_function(3, natom))
822 ALLOCATE (dcdr_env%apt_el_dcdr(3, 3, natom))
823 ALLOCATE (dcdr_env%apt_nuc_dcdr(3, 3, natom))
824 ALLOCATE (dcdr_env%apt_total_dcdr(3, 3, natom))
826 dcdr_env%apt_el_dcdr = 0._dp
827 dcdr_env%apt_nuc_dcdr = 0._dp
828 dcdr_env%apt_total_dcdr = 0._dp
830 dcdr_env%deltaR = 0.0_dp
831 dcdr_env%delta_basis_function = 0._dp
834 IF (dcdr_env%localized_psi0)
THEN
835 ALLOCATE (dcdr_env%apt_el_dcdr_per_center(3, 3, natom, dcdr_env%nbr_center(1)))
836 ALLOCATE (dcdr_env%apt_el_dcdr_per_subset(3, 3, natom, nsubset))
837 ALLOCATE (dcdr_env%apt_subset(3, 3, natom, nsubset))
838 dcdr_env%apt_el_dcdr_per_center = 0._dp
839 dcdr_env%apt_el_dcdr_per_subset = 0._dp
840 dcdr_env%apt_subset = 0.0_dp
844 ALLOCATE (dcdr_env%mo_coeff(nspins))
845 ALLOCATE (dcdr_env%dCR(nspins))
846 ALLOCATE (dcdr_env%dCR_prime(nspins))
847 ALLOCATE (dcdr_env%chc(nspins))
848 ALLOCATE (dcdr_env%op_dR(nspins))
851 CALL cp_fm_create(dcdr_env%dCR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
852 CALL cp_fm_create(dcdr_env%dCR_prime(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
853 CALL cp_fm_create(dcdr_env%mo_coeff(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
854 CALL cp_fm_create(dcdr_env%chc(ispin), dcdr_env%momo_fm_struct(ispin)%struct, set_zero=.true.)
855 CALL cp_fm_create(dcdr_env%op_dR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct, set_zero=.true.)
857 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff)
858 CALL cp_fm_to_fm(mo_coeff, dcdr_env%mo_coeff(ispin))
861 IF (dcdr_env%z_matrix_method)
THEN
862 ALLOCATE (dcdr_env%matrix_m_alpha(3, nspins))
865 CALL cp_fm_create(dcdr_env%matrix_m_alpha(i, ispin), dcdr_env%likemos_fm_struct(1)%struct)
866 CALL cp_fm_set_all(dcdr_env%matrix_m_alpha(i, ispin), 0.0_dp)
872 NULLIFY (dcdr_env%hamiltonian1)
873 NULLIFY (dcdr_env%moments)
874 NULLIFY (dcdr_env%matrix_difdip)
875 NULLIFY (dcdr_env%matrix_core_charge_1)
876 NULLIFY (dcdr_env%matrix_s1)
877 NULLIFY (dcdr_env%matrix_t1)
878 NULLIFY (dcdr_env%matrix_apply_op_constant)
879 NULLIFY (dcdr_env%matrix_d_vhxc_dR)
880 NULLIFY (dcdr_env%matrix_vhxc_perturbed_basis)
881 NULLIFY (dcdr_env%matrix_hc)
882 NULLIFY (dcdr_env%matrix_ppnl_1)
901 CALL dbcsr_create(dcdr_env%matrix_nosym_temp(i)%matrix, template=matrix_ks(1)%matrix, &
902 matrix_type=dbcsr_type_no_symmetry)
904 CALL dbcsr_set(dcdr_env%matrix_nosym_temp(i)%matrix, 0._dp)
906 CALL dbcsr_init_p(dcdr_env%matrix_nosym_temp2(i)%matrix)
907 CALL dbcsr_create(dcdr_env%matrix_nosym_temp2(i)%matrix, template=matrix_ks(1)%matrix, &
908 matrix_type=dbcsr_type_no_symmetry)
910 CALL dbcsr_set(dcdr_env%matrix_nosym_temp2(i)%matrix, 0._dp)
916 CALL dbcsr_copy(dcdr_env%moments(i)%matrix, matrix_ks(1)%matrix,
"dcdr_env%moments")
917 CALL dbcsr_set(dcdr_env%moments(i)%matrix, 0.0_dp)
924 CALL dbcsr_copy(dcdr_env%matrix_difdip(i, j)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
925 CALL dbcsr_set(dcdr_env%matrix_difdip(i, j)%matrix, 0.0_dp)
931 CALL dbcsr_init_p(dcdr_env%perturbed_dm_correction(ispin)%matrix)
932 CALL dbcsr_init_p(dcdr_env%matrix_apply_op_constant(ispin)%matrix)
933 CALL dbcsr_copy(dcdr_env%matrix_apply_op_constant(ispin)%matrix, matrix_ks(1)%matrix)
934 CALL dbcsr_copy(dcdr_env%perturbed_dm_correction(ispin)%matrix, matrix_ks(1)%matrix)
942 CALL dbcsr_copy(dcdr_env%matrix_s1(1)%matrix, matrix_s(1)%matrix)
943 CALL dbcsr_copy(dcdr_env%matrix_t1(1)%matrix, dcdr_env%matrix_t(1)%matrix)
947 CALL dbcsr_copy(dcdr_env%matrix_s1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
950 CALL dbcsr_copy(dcdr_env%matrix_t1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
956 CALL dbcsr_init_p(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix)
957 CALL dbcsr_copy(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix, dcdr_env%matrix_s1(1)%matrix)
963 CALL dbcsr_create(dcdr_env%matrix_hc(i)%matrix, template=matrix_ks(1)%matrix, &
964 matrix_type=dbcsr_type_symmetric)
966 CALL dbcsr_set(dcdr_env%matrix_hc(i)%matrix, 0.0_dp)
971 CALL dbcsr_create(dcdr_env%matrix_ppnl_1(i)%matrix, template=matrix_ks(1)%matrix, &
972 matrix_type=dbcsr_type_symmetric)
974 CALL dbcsr_set(dcdr_env%matrix_ppnl_1(i)%matrix, 0.0_dp)
979 CALL dbcsr_init_p(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix)
980 CALL dbcsr_copy(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix, dcdr_env%matrix_s1(1)%matrix)
983 CALL dbcsr_init_p(dcdr_env%matrix_core_charge_1(i)%matrix)
984 CALL dbcsr_copy(dcdr_env%matrix_core_charge_1(i)%matrix, dcdr_env%matrix_s1(1)%matrix)
985 CALL dbcsr_set(dcdr_env%matrix_core_charge_1(i)%matrix, 0.0_dp)
990 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
991 CALL cp_fm_create(buf, dcdr_env%likemos_fm_struct(ispin)%struct)
996 1.0_dp, mo_coeff, buf, &
997 0.0_dp, dcdr_env%chc(ispin))
1003 "PRINT%PROGRAM_RUN_INFO")
1005 CALL timestop(handle)
1027 DEALLOCATE (dcdr_env%list_of_atoms)
1031 DO ispin = 1, dcdr_env%nspins
1035 DEALLOCATE (dcdr_env%momo_fm_struct)
1036 DEALLOCATE (dcdr_env%likemos_fm_struct)
1038 DEALLOCATE (dcdr_env%deltar)
1039 DEALLOCATE (dcdr_env%delta_basis_function)
1041 IF (dcdr_env%localized_psi0)
THEN
1043 DEALLOCATE (dcdr_env%centers_set(1)%array)
1044 DEALLOCATE (dcdr_env%center_list(1)%array)
1045 DEALLOCATE (dcdr_env%centers_set)
1046 DEALLOCATE (dcdr_env%center_list)
1047 DEALLOCATE (dcdr_env%apt_subset)
1050 DEALLOCATE (dcdr_env%apt_el_dcdr)
1051 DEALLOCATE (dcdr_env%apt_nuc_dcdr)
1052 DEALLOCATE (dcdr_env%apt_total_dcdr)
1053 IF (dcdr_env%localized_psi0)
THEN
1054 DEALLOCATE (dcdr_env%apt_el_dcdr_per_center)
1055 DEALLOCATE (dcdr_env%apt_el_dcdr_per_subset)
1065 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_create(matrix, matrix_struct, name, use_sp, nrow, ncol, set_zero)
creates a new full matrix with the given structure
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_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, 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, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
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)
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...