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))
233 IF (rst_unit > 0)
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
234 CALL para_env%bcast(iostat)
235 CALL para_env%bcast(beta_tmp)
236 CALL para_env%bcast(lambda_tmp)
237 CALL para_env%bcast(nspins_tmp)
238 CALL para_env%bcast(nao_tmp)
242 IF (nspins_tmp .NE. nspins)
THEN
243 cpabort(
"nspins not consistent")
245 IF (nao_tmp .NE. nao) cpabort(
"nao not consistent")
248 IF (lambda_tmp .NE. lambda) cpabort(
"lambda not consistent")
249 IF (beta_tmp .NE. beta) cpabort(
"beta not consistent")
252 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
255 IF (rst_unit > 0)
READ (rst_unit) nmo_tmp
256 CALL para_env%bcast(nmo_tmp)
257 IF (nmo_tmp .NE. nmo) cpabort(
"nmo not consistent")
260 DO i = 1, nmo, max(max_block, 1)
261 i_block = min(max_block, nmo - i + 1)
263 IF (rst_unit > 0)
READ (rst_unit) vecbuffer(1:nao, j)
265 CALL para_env%bcast(vecbuffer)
270 IF (iostat /= 0)
THEN
271 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
272 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
275 DEALLOCATE (vecbuffer)
279 IF (para_env%is_source())
THEN
283 CALL timestop(handle)
301 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
302 INTEGER,
INTENT(IN) :: lambda, beta
303 CHARACTER(LEN=*) :: tag
305 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dcdr_write_restart'
307 CHARACTER(LEN=default_path_length) :: filename
308 CHARACTER(LEN=default_string_length) :: my_middle, my_pos, my_status
309 INTEGER :: handle, i, i_block, ia, ie, iounit, &
310 ispin, j, max_block, nao, nmo, nspins, &
312 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
319 NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
321 CALL timeset(routinen, handle)
326 used_print_key=print_key), &
330 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
338 my_status =
"REPLACE"
341 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
344 extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
345 file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
348 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
351 WRITE (unit=iounit, fmt=
"(T2,A)") &
352 "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">"
359 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
360 ALLOCATE (vecbuffer(nao, max_block))
362 IF (rst_unit > 0)
WRITE (rst_unit) lambda, beta, nspins, nao
367 IF (rst_unit > 0)
WRITE (rst_unit) nmo
369 DO i = 1, nmo, max(max_block, 1)
370 i_block = min(max_block, nmo - i + 1)
376 IF (rst_unit > 0)
WRITE (rst_unit) vecbuffer(1:nao, j)
381 DEALLOCATE (vecbuffer)
387 CALL timestop(handle)
401 CHARACTER(LEN=default_string_length) :: description
402 INTEGER :: alpha, beta, delta,
gamma, i, k, l, &
403 lambda, natom, nsubset, output_unit
404 REAL(dp),
DIMENSION(:, :, :),
POINTER :: apt_el_dcdr, apt_nuc_dcdr, apt_total_dcdr
405 REAL(dp),
DIMENSION(:, :, :, :),
POINTER :: apt_center_dcdr, apt_subset_dcdr
406 REAL(kind=dp),
DIMENSION(3, 3) :: sum_rule_0, sum_rule_1, sum_rule_2
420 NULLIFY (particle_set)
421 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
422 natom =
SIZE(particle_set)
423 nsubset =
SIZE(molecule_set)
425 apt_el_dcdr => dcdr_env%apt_el_dcdr
426 apt_nuc_dcdr => dcdr_env%apt_nuc_dcdr
427 apt_total_dcdr => dcdr_env%apt_total_dcdr
428 apt_subset_dcdr => dcdr_env%apt_el_dcdr_per_subset
429 apt_center_dcdr => dcdr_env%apt_el_dcdr_per_center
431 IF (dcdr_env%localized_psi0)
THEN
432 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | Write the final apt matrix per atom per subset'
435 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, *)
'APT | Subset', l
437 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,I3,F15.6,F15.6,F15.6)") &
438 'APT | apt_subset ', i, apt_subset_dcdr(i, :, k, l)
444 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)") &
445 'APT | Write the final apt matrix per atom (Position perturbation)'
447 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,I3,A,F15.6)") &
448 'APT | Atom', l,
' - GAPT ', &
449 (apt_total_dcdr(1, 1, l) &
450 + apt_total_dcdr(2, 2, l) &
451 + apt_total_dcdr(3, 3, l))/3._dp
453 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,F15.6,F15.6,F15.6)")
"APT | ", apt_total_dcdr(i, :, l)
457 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | Write the total apt matrix'
459 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, &
460 "(A,F15.6,F15.6,F15.6)")
"APT | ", sum(apt_total_dcdr(i, :, :), dim=2)
462 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
'APT | End Write the final apt matrix'
466 description =
"[DIPOLE]"
467 CALL get_results(results=results, description=description, values=dcdr_env%dipole_pos(1:3))
478 sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
479 + apt_total_dcdr(alpha, beta, lambda)
484 sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
485 + levi_civita(alpha, beta,
gamma)*dcdr_env%dipole_pos(
gamma)
492 sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
493 + levi_civita(beta,
gamma, delta) &
494 *particle_set(lambda)%r(
gamma) &
495 *apt_total_dcdr(delta, alpha, lambda)
503 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A)")
"APT | Position perturbation sum rules"
504 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit,
"(A,T18,A,T34,A,T49,A)") &
505 "APT |",
"Total APT",
"Dipole",
"R * APT"
508 IF (dcdr_env%output_unit > 0)
WRITE (dcdr_env%output_unit, &
509 "(A,I3,I3,F15.6,F15.6,F15.6)") &
512 sum_rule_0(alpha, beta), &
513 sum_rule_1(alpha, beta), &
514 sum_rule_2(alpha, beta)
527 REAL(dp),
DIMENSION(3),
INTENT(in) :: r
528 TYPE(
cell_type),
INTENT(in),
POINTER :: cell
529 REAL(dp),
DIMENSION(3),
INTENT(out) :: r_shifted
532 REAL(kind=dp),
DIMENSION(3) :: abc
538 IF (r(i) < 0._dp)
THEN
539 r_shifted(i) = r(i) + abc(i)
540 ELSE IF (r(i) > abc(i))
THEN
541 r_shifted(i) = r(i) - abc(i)
557 CHARACTER(LEN=*),
PARAMETER :: routinen =
'get_loc_setting'
559 INTEGER :: handle, is, ispin, istate, max_states, &
560 nmo, nmoloc, nstate, nstate_list(2)
561 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: state_list
562 REAL(dp),
DIMENSION(:, :),
POINTER :: center_array
569 CALL timeset(routinen, handle)
572 linres_control=linres_control, &
578 max_states = max(max_states, nmo)
581 nmoloc =
SIZE(linres_control%qs_loc_env%localized_wfn_control%centers_set(1)%array, 2)
582 IF (nmoloc .NE. nmo)
THEN
583 cpabort(
"The number of localized functions is not equal to the number of states.")
589 SELECT CASE (dcdr_env%orb_center)
591 dcdr_env%orb_center_name =
"WANNIER"
596 qs_loc_env => linres_control%qs_loc_env
597 CALL get_qs_loc_env(qs_loc_env, localized_wfn_control=localized_wfn_control)
599 ALLOCATE (dcdr_env%centers_set(dcdr_env%nspins))
600 ALLOCATE (dcdr_env%center_list(dcdr_env%nspins))
601 ALLOCATE (state_list(max_states, dcdr_env%nspins))
602 state_list(:, :) = huge(0)
603 nstate_list(:) = huge(0)
606 DO ispin = 1, dcdr_env%nspins
607 center_array => localized_wfn_control%centers_set(ispin)%array
609 DO istate = 1,
SIZE(center_array, 2)
611 state_list(nstate, ispin) = istate
613 nstate_list(ispin) = nstate
616 nstate = nstate_list(ispin)
617 dcdr_env%nstates(ispin) = nstate
619 ALLOCATE (dcdr_env%center_list(ispin)%array(2, nstate + 1))
620 ALLOCATE (dcdr_env%centers_set(ispin)%array(3, nstate))
621 dcdr_env%center_list(ispin)%array(:, :) = huge(0)
622 dcdr_env%centers_set(ispin)%array(:, :) = huge(0.0_dp)
624 center_array => localized_wfn_control%centers_set(ispin)%array
627 SELECT CASE (dcdr_env%orb_center)
630 dcdr_env%nbr_center(ispin) = nstate
632 istate = state_list(is, 1)
633 dcdr_env%centers_set(ispin)%array(1:3, is) = center_array(1:3, istate)
634 dcdr_env%center_list(ispin)%array(1, is) = is
635 dcdr_env%center_list(ispin)%array(2, is) = istate
637 dcdr_env%center_list(ispin)%array(1, nstate + 1) = nstate + 1
640 cpabort(
"Unknown orbital center...")
644 CALL timestop(handle)
656 CHARACTER(LEN=*),
PARAMETER :: routinen =
'dcdr_env_init'
658 INTEGER :: handle, homo, i, isize, ispin, j, jg, &
659 n_rep, nao, natom, nmo, nspins, &
660 nsubset, output_unit, reference, &
662 INTEGER,
DIMENSION(:),
POINTER :: tmplist
664 REAL(kind=dp),
DIMENSION(:),
POINTER :: ref_point
668 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, matrix_s
674 POINTER :: sab_all, sab_orb
679 CALL timeset(routinen, handle)
682 NULLIFY (logger, loc_section, dcdr_section, lr_section)
687 extension=
".data", middle_name=
"dcdr", log_filename=.false., &
688 file_position=
"REWIND", file_status=
"REPLACE")
692 extension=
".linresLog")
693 unit_number =
cp_print_key_unit_nr(logger, lr_section,
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
695 IF (output_unit > 0)
THEN
696 WRITE (output_unit,
"(/,T20,A,/)")
"*** Start DCDR calculation ***"
699 NULLIFY (ks_env, dft_control, sab_orb, sab_all, particle_set, molecule_set, matrix_s, matrix_ks, mos, para_env)
702 dft_control=dft_control, &
705 particle_set=particle_set, &
706 molecule_set=molecule_set, &
708 matrix_ks=matrix_ks, &
712 natom =
SIZE(particle_set)
713 nsubset =
SIZE(molecule_set)
714 nspins = dft_control%nspins
715 dcdr_env%nspins = dft_control%nspins
717 NULLIFY (dcdr_env%matrix_s)
719 matrix_name=
"OVERLAP MATRIX", &
721 basis_type_a=
"ORB", &
722 basis_type_b=
"ORB", &
725 NULLIFY (dcdr_env%matrix_t)
727 matrix_name=
"KINETIC ENERGY MATRIX", &
729 sab_nl=sab_orb, nderivative=1, &
730 eps_filter=dft_control%qs_control%eps_filter_matrix)
733 CALL section_vals_val_get(dcdr_section,
"DISTRIBUTED_ORIGIN", l_val=dcdr_env%distributed_origin)
738 dcdr_env%ref_point = 0._dp
745 ALLOCATE (dcdr_env%list_of_atoms(natom))
747 dcdr_env%list_of_atoms(jg) = jg
751 ALLOCATE (dcdr_env%list_of_atoms(isize))
753 CALL reallocate(dcdr_env%list_of_atoms, 1, isize +
SIZE(tmplist))
754 dcdr_env%list_of_atoms(isize + 1:isize +
SIZE(tmplist)) = tmplist
755 isize =
SIZE(dcdr_env%list_of_atoms)
760 IF (dcdr_env%localized_psi0)
THEN
771 cpabort(
"User-defined reference point should be given explicitly")
775 reference=reference, &
780 NULLIFY (dcdr_env%aoao_fm_struct, &
781 dcdr_env%momo_fm_struct, &
782 dcdr_env%likemos_fm_struct, &
783 dcdr_env%homohomo_fm_struct)
784 CALL get_mo_set(mo_set=mos(1), mo_coeff=mo_coeff, &
785 nao=nao, nmo=nmo, homo=homo)
787 ncol_global=nao, para_env=para_env, &
788 context=mo_coeff%matrix_struct%context)
790 ncol_global=homo, para_env=para_env, &
791 context=mo_coeff%matrix_struct%context)
794 ALLOCATE (dcdr_env%nmo(nspins))
795 ALLOCATE (dcdr_env%momo_fm_struct(nspins))
796 ALLOCATE (dcdr_env%likemos_fm_struct(nspins))
798 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, &
799 nao=nao, nmo=nmo, homo=homo)
801 ncol_global=nmo, para_env=para_env, &
802 context=mo_coeff%matrix_struct%context)
804 template_fmstruct=mo_coeff%matrix_struct)
805 dcdr_env%nmo(ispin) = nmo
809 ALLOCATE (dcdr_env%deltaR(3, natom))
810 ALLOCATE (dcdr_env%delta_basis_function(3, natom))
811 ALLOCATE (dcdr_env%apt_el_dcdr(3, 3, natom))
812 ALLOCATE (dcdr_env%apt_nuc_dcdr(3, 3, natom))
813 ALLOCATE (dcdr_env%apt_total_dcdr(3, 3, natom))
815 dcdr_env%apt_el_dcdr = 0._dp
816 dcdr_env%apt_nuc_dcdr = 0._dp
817 dcdr_env%apt_total_dcdr = 0._dp
819 dcdr_env%deltaR = 0.0_dp
820 dcdr_env%delta_basis_function = 0._dp
823 IF (dcdr_env%localized_psi0)
THEN
824 ALLOCATE (dcdr_env%apt_el_dcdr_per_center(3, 3, natom, dcdr_env%nbr_center(1)))
825 ALLOCATE (dcdr_env%apt_el_dcdr_per_subset(3, 3, natom, nsubset))
826 ALLOCATE (dcdr_env%apt_subset(3, 3, natom, nsubset))
827 dcdr_env%apt_el_dcdr_per_center = 0._dp
828 dcdr_env%apt_el_dcdr_per_subset = 0._dp
829 dcdr_env%apt_subset = 0.0_dp
833 ALLOCATE (dcdr_env%mo_coeff(nspins))
834 ALLOCATE (dcdr_env%dCR(nspins))
835 ALLOCATE (dcdr_env%dCR_prime(nspins))
836 ALLOCATE (dcdr_env%chc(nspins))
837 ALLOCATE (dcdr_env%op_dR(nspins))
840 CALL cp_fm_create(dcdr_env%dCR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
841 CALL cp_fm_create(dcdr_env%dCR_prime(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
842 CALL cp_fm_create(dcdr_env%mo_coeff(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
843 CALL cp_fm_create(dcdr_env%chc(ispin), dcdr_env%momo_fm_struct(ispin)%struct)
844 CALL cp_fm_create(dcdr_env%op_dR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
846 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff)
847 CALL cp_fm_to_fm(mo_coeff, dcdr_env%mo_coeff(ispin))
850 IF (dcdr_env%z_matrix_method)
THEN
851 ALLOCATE (dcdr_env%matrix_m_alpha(3, nspins))
854 CALL cp_fm_create(dcdr_env%matrix_m_alpha(i, ispin), dcdr_env%likemos_fm_struct(1)%struct)
855 CALL cp_fm_set_all(dcdr_env%matrix_m_alpha(i, ispin), 0.0_dp)
861 NULLIFY (dcdr_env%hamiltonian1)
862 NULLIFY (dcdr_env%moments)
863 NULLIFY (dcdr_env%matrix_difdip)
864 NULLIFY (dcdr_env%matrix_core_charge_1)
865 NULLIFY (dcdr_env%matrix_s1)
866 NULLIFY (dcdr_env%matrix_t1)
867 NULLIFY (dcdr_env%matrix_apply_op_constant)
868 NULLIFY (dcdr_env%matrix_d_vhxc_dR)
869 NULLIFY (dcdr_env%matrix_vhxc_perturbed_basis)
870 NULLIFY (dcdr_env%matrix_hc)
871 NULLIFY (dcdr_env%matrix_ppnl_1)
890 CALL dbcsr_create(dcdr_env%matrix_nosym_temp(i)%matrix, template=matrix_ks(1)%matrix, &
891 matrix_type=dbcsr_type_no_symmetry)
893 CALL dbcsr_set(dcdr_env%matrix_nosym_temp(i)%matrix, 0._dp)
895 CALL dbcsr_init_p(dcdr_env%matrix_nosym_temp2(i)%matrix)
896 CALL dbcsr_create(dcdr_env%matrix_nosym_temp2(i)%matrix, template=matrix_ks(1)%matrix, &
897 matrix_type=dbcsr_type_no_symmetry)
899 CALL dbcsr_set(dcdr_env%matrix_nosym_temp2(i)%matrix, 0._dp)
905 CALL dbcsr_copy(dcdr_env%moments(i)%matrix, matrix_ks(1)%matrix,
"dcdr_env%moments")
906 CALL dbcsr_set(dcdr_env%moments(i)%matrix, 0.0_dp)
913 CALL dbcsr_copy(dcdr_env%matrix_difdip(i, j)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
914 CALL dbcsr_set(dcdr_env%matrix_difdip(i, j)%matrix, 0.0_dp)
920 CALL dbcsr_init_p(dcdr_env%perturbed_dm_correction(ispin)%matrix)
921 CALL dbcsr_init_p(dcdr_env%matrix_apply_op_constant(ispin)%matrix)
922 CALL dbcsr_copy(dcdr_env%matrix_apply_op_constant(ispin)%matrix, matrix_ks(1)%matrix)
923 CALL dbcsr_copy(dcdr_env%perturbed_dm_correction(ispin)%matrix, matrix_ks(1)%matrix)
931 CALL dbcsr_copy(dcdr_env%matrix_s1(1)%matrix, matrix_s(1)%matrix)
932 CALL dbcsr_copy(dcdr_env%matrix_t1(1)%matrix, dcdr_env%matrix_t(1)%matrix)
936 CALL dbcsr_copy(dcdr_env%matrix_s1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
939 CALL dbcsr_copy(dcdr_env%matrix_t1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
945 CALL dbcsr_init_p(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix)
946 CALL dbcsr_copy(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix, dcdr_env%matrix_s1(1)%matrix)
952 CALL dbcsr_create(dcdr_env%matrix_hc(i)%matrix, template=matrix_ks(1)%matrix, &
953 matrix_type=dbcsr_type_symmetric)
955 CALL dbcsr_set(dcdr_env%matrix_hc(i)%matrix, 0.0_dp)
960 CALL dbcsr_create(dcdr_env%matrix_ppnl_1(i)%matrix, template=matrix_ks(1)%matrix, &
961 matrix_type=dbcsr_type_symmetric)
963 CALL dbcsr_set(dcdr_env%matrix_ppnl_1(i)%matrix, 0.0_dp)
968 CALL dbcsr_init_p(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix)
969 CALL dbcsr_copy(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix, dcdr_env%matrix_s1(1)%matrix)
972 CALL dbcsr_init_p(dcdr_env%matrix_core_charge_1(i)%matrix)
973 CALL dbcsr_copy(dcdr_env%matrix_core_charge_1(i)%matrix, dcdr_env%matrix_s1(1)%matrix)
974 CALL dbcsr_set(dcdr_env%matrix_core_charge_1(i)%matrix, 0.0_dp)
979 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
980 CALL cp_fm_create(buf, dcdr_env%likemos_fm_struct(ispin)%struct)
985 1.0_dp, mo_coeff, buf, &
986 0.0_dp, dcdr_env%chc(ispin))
992 "PRINT%PROGRAM_RUN_INFO")
994 CALL timestop(handle)
1016 DEALLOCATE (dcdr_env%list_of_atoms)
1020 DO ispin = 1, dcdr_env%nspins
1024 DEALLOCATE (dcdr_env%momo_fm_struct)
1025 DEALLOCATE (dcdr_env%likemos_fm_struct)
1027 DEALLOCATE (dcdr_env%deltar)
1028 DEALLOCATE (dcdr_env%delta_basis_function)
1030 IF (dcdr_env%localized_psi0)
THEN
1032 DEALLOCATE (dcdr_env%centers_set(1)%array)
1033 DEALLOCATE (dcdr_env%center_list(1)%array)
1034 DEALLOCATE (dcdr_env%centers_set)
1035 DEALLOCATE (dcdr_env%center_list)
1036 DEALLOCATE (dcdr_env%apt_subset)
1039 DEALLOCATE (dcdr_env%apt_el_dcdr)
1040 DEALLOCATE (dcdr_env%apt_nuc_dcdr)
1041 DEALLOCATE (dcdr_env%apt_total_dcdr)
1042 IF (dcdr_env%localized_psi0)
THEN
1043 DEALLOCATE (dcdr_env%apt_el_dcdr_per_center)
1044 DEALLOCATE (dcdr_env%apt_el_dcdr_per_subset)
1054 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_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,...
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
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.
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, 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, ecoul_1c, rho0_s_rs, rho0_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)
Get the QUICKSTEP environment.
Calculation of kinetic energy matrix and forces.
subroutine, public build_kinetic_matrix(ks_env, matrix_t, matrixkp_t, matrix_name, basis_type, sab_nl, calculate_forces, matrix_p, matrixkp_p, eps_filter, nderivative)
Calculation of the kinetic energy matrix over Cartesian Gaussian functions.
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...