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
669 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_p
675 POINTER :: sab_all, sab_orb
680 CALL timeset(routinen, handle)
683 NULLIFY (logger, loc_section, dcdr_section, lr_section)
688 extension=
".data", middle_name=
"dcdr", log_filename=.false., &
689 file_position=
"REWIND", file_status=
"REPLACE")
693 extension=
".linresLog")
694 unit_number =
cp_print_key_unit_nr(logger, lr_section,
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
696 IF (output_unit > 0)
THEN
697 WRITE (output_unit,
"(/,T20,A,/)")
"*** Start DCDR calculation ***"
700 NULLIFY (ks_env, dft_control, sab_orb, sab_all, particle_set, molecule_set, matrix_s, matrix_ks, mos, para_env)
703 dft_control=dft_control, &
706 particle_set=particle_set, &
707 molecule_set=molecule_set, &
709 matrix_ks=matrix_ks, &
713 natom =
SIZE(particle_set)
714 nsubset =
SIZE(molecule_set)
715 nspins = dft_control%nspins
716 dcdr_env%nspins = dft_control%nspins
718 NULLIFY (dcdr_env%matrix_s)
720 matrix_name=
"OVERLAP MATRIX", &
722 basis_type_a=
"ORB", &
723 basis_type_b=
"ORB", &
726 NULLIFY (dcdr_env%matrix_t)
729 matrix_name=
"KINETIC ENERGY MATRIX", &
730 calculate_forces=.false., &
734 eps_filter=dft_control%qs_control%eps_filter_matrix)
743 CALL section_vals_val_get(dcdr_section,
"DISTRIBUTED_ORIGIN", l_val=dcdr_env%distributed_origin)
748 dcdr_env%ref_point = 0._dp
755 ALLOCATE (dcdr_env%list_of_atoms(natom))
757 dcdr_env%list_of_atoms(jg) = jg
761 ALLOCATE (dcdr_env%list_of_atoms(isize))
763 CALL reallocate(dcdr_env%list_of_atoms, 1, isize +
SIZE(tmplist))
764 dcdr_env%list_of_atoms(isize + 1:isize +
SIZE(tmplist)) = tmplist
765 isize =
SIZE(dcdr_env%list_of_atoms)
770 IF (dcdr_env%localized_psi0)
THEN
781 cpabort(
"User-defined reference point should be given explicitly")
785 reference=reference, &
790 NULLIFY (dcdr_env%aoao_fm_struct, &
791 dcdr_env%momo_fm_struct, &
792 dcdr_env%likemos_fm_struct, &
793 dcdr_env%homohomo_fm_struct)
794 CALL get_mo_set(mo_set=mos(1), mo_coeff=mo_coeff, &
795 nao=nao, nmo=nmo, homo=homo)
797 ncol_global=nao, para_env=para_env, &
798 context=mo_coeff%matrix_struct%context)
800 ncol_global=homo, para_env=para_env, &
801 context=mo_coeff%matrix_struct%context)
804 ALLOCATE (dcdr_env%nmo(nspins))
805 ALLOCATE (dcdr_env%momo_fm_struct(nspins))
806 ALLOCATE (dcdr_env%likemos_fm_struct(nspins))
808 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, &
809 nao=nao, nmo=nmo, homo=homo)
811 ncol_global=nmo, para_env=para_env, &
812 context=mo_coeff%matrix_struct%context)
814 template_fmstruct=mo_coeff%matrix_struct)
815 dcdr_env%nmo(ispin) = nmo
819 ALLOCATE (dcdr_env%deltaR(3, natom))
820 ALLOCATE (dcdr_env%delta_basis_function(3, natom))
821 ALLOCATE (dcdr_env%apt_el_dcdr(3, 3, natom))
822 ALLOCATE (dcdr_env%apt_nuc_dcdr(3, 3, natom))
823 ALLOCATE (dcdr_env%apt_total_dcdr(3, 3, natom))
825 dcdr_env%apt_el_dcdr = 0._dp
826 dcdr_env%apt_nuc_dcdr = 0._dp
827 dcdr_env%apt_total_dcdr = 0._dp
829 dcdr_env%deltaR = 0.0_dp
830 dcdr_env%delta_basis_function = 0._dp
833 IF (dcdr_env%localized_psi0)
THEN
834 ALLOCATE (dcdr_env%apt_el_dcdr_per_center(3, 3, natom, dcdr_env%nbr_center(1)))
835 ALLOCATE (dcdr_env%apt_el_dcdr_per_subset(3, 3, natom, nsubset))
836 ALLOCATE (dcdr_env%apt_subset(3, 3, natom, nsubset))
837 dcdr_env%apt_el_dcdr_per_center = 0._dp
838 dcdr_env%apt_el_dcdr_per_subset = 0._dp
839 dcdr_env%apt_subset = 0.0_dp
843 ALLOCATE (dcdr_env%mo_coeff(nspins))
844 ALLOCATE (dcdr_env%dCR(nspins))
845 ALLOCATE (dcdr_env%dCR_prime(nspins))
846 ALLOCATE (dcdr_env%chc(nspins))
847 ALLOCATE (dcdr_env%op_dR(nspins))
850 CALL cp_fm_create(dcdr_env%dCR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
851 CALL cp_fm_create(dcdr_env%dCR_prime(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
852 CALL cp_fm_create(dcdr_env%mo_coeff(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
853 CALL cp_fm_create(dcdr_env%chc(ispin), dcdr_env%momo_fm_struct(ispin)%struct)
854 CALL cp_fm_create(dcdr_env%op_dR(ispin), dcdr_env%likemos_fm_struct(ispin)%struct)
856 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff)
857 CALL cp_fm_to_fm(mo_coeff, dcdr_env%mo_coeff(ispin))
860 IF (dcdr_env%z_matrix_method)
THEN
861 ALLOCATE (dcdr_env%matrix_m_alpha(3, nspins))
864 CALL cp_fm_create(dcdr_env%matrix_m_alpha(i, ispin), dcdr_env%likemos_fm_struct(1)%struct)
865 CALL cp_fm_set_all(dcdr_env%matrix_m_alpha(i, ispin), 0.0_dp)
871 NULLIFY (dcdr_env%hamiltonian1)
872 NULLIFY (dcdr_env%moments)
873 NULLIFY (dcdr_env%matrix_difdip)
874 NULLIFY (dcdr_env%matrix_core_charge_1)
875 NULLIFY (dcdr_env%matrix_s1)
876 NULLIFY (dcdr_env%matrix_t1)
877 NULLIFY (dcdr_env%matrix_apply_op_constant)
878 NULLIFY (dcdr_env%matrix_d_vhxc_dR)
879 NULLIFY (dcdr_env%matrix_vhxc_perturbed_basis)
880 NULLIFY (dcdr_env%matrix_hc)
881 NULLIFY (dcdr_env%matrix_ppnl_1)
900 CALL dbcsr_create(dcdr_env%matrix_nosym_temp(i)%matrix, template=matrix_ks(1)%matrix, &
901 matrix_type=dbcsr_type_no_symmetry)
903 CALL dbcsr_set(dcdr_env%matrix_nosym_temp(i)%matrix, 0._dp)
905 CALL dbcsr_init_p(dcdr_env%matrix_nosym_temp2(i)%matrix)
906 CALL dbcsr_create(dcdr_env%matrix_nosym_temp2(i)%matrix, template=matrix_ks(1)%matrix, &
907 matrix_type=dbcsr_type_no_symmetry)
909 CALL dbcsr_set(dcdr_env%matrix_nosym_temp2(i)%matrix, 0._dp)
915 CALL dbcsr_copy(dcdr_env%moments(i)%matrix, matrix_ks(1)%matrix,
"dcdr_env%moments")
916 CALL dbcsr_set(dcdr_env%moments(i)%matrix, 0.0_dp)
923 CALL dbcsr_copy(dcdr_env%matrix_difdip(i, j)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
924 CALL dbcsr_set(dcdr_env%matrix_difdip(i, j)%matrix, 0.0_dp)
930 CALL dbcsr_init_p(dcdr_env%perturbed_dm_correction(ispin)%matrix)
931 CALL dbcsr_init_p(dcdr_env%matrix_apply_op_constant(ispin)%matrix)
932 CALL dbcsr_copy(dcdr_env%matrix_apply_op_constant(ispin)%matrix, matrix_ks(1)%matrix)
933 CALL dbcsr_copy(dcdr_env%perturbed_dm_correction(ispin)%matrix, matrix_ks(1)%matrix)
941 CALL dbcsr_copy(dcdr_env%matrix_s1(1)%matrix, matrix_s(1)%matrix)
942 CALL dbcsr_copy(dcdr_env%matrix_t1(1)%matrix, dcdr_env%matrix_t(1)%matrix)
946 CALL dbcsr_copy(dcdr_env%matrix_s1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
949 CALL dbcsr_copy(dcdr_env%matrix_t1(i)%matrix, dcdr_env%matrix_nosym_temp(1)%matrix)
955 CALL dbcsr_init_p(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix)
956 CALL dbcsr_copy(dcdr_env%matrix_vhxc_perturbed_basis(ispin, j)%matrix, dcdr_env%matrix_s1(1)%matrix)
962 CALL dbcsr_create(dcdr_env%matrix_hc(i)%matrix, template=matrix_ks(1)%matrix, &
963 matrix_type=dbcsr_type_symmetric)
965 CALL dbcsr_set(dcdr_env%matrix_hc(i)%matrix, 0.0_dp)
970 CALL dbcsr_create(dcdr_env%matrix_ppnl_1(i)%matrix, template=matrix_ks(1)%matrix, &
971 matrix_type=dbcsr_type_symmetric)
973 CALL dbcsr_set(dcdr_env%matrix_ppnl_1(i)%matrix, 0.0_dp)
978 CALL dbcsr_init_p(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix)
979 CALL dbcsr_copy(dcdr_env%matrix_d_vhxc_dR(i, ispin)%matrix, dcdr_env%matrix_s1(1)%matrix)
982 CALL dbcsr_init_p(dcdr_env%matrix_core_charge_1(i)%matrix)
983 CALL dbcsr_copy(dcdr_env%matrix_core_charge_1(i)%matrix, dcdr_env%matrix_s1(1)%matrix)
984 CALL dbcsr_set(dcdr_env%matrix_core_charge_1(i)%matrix, 0.0_dp)
989 CALL get_mo_set(mo_set=mos(ispin), mo_coeff=mo_coeff, nao=nao, nmo=nmo)
990 CALL cp_fm_create(buf, dcdr_env%likemos_fm_struct(ispin)%struct)
995 1.0_dp, mo_coeff, buf, &
996 0.0_dp, dcdr_env%chc(ispin))
1002 "PRINT%PROGRAM_RUN_INFO")
1004 CALL timestop(handle)
1026 DEALLOCATE (dcdr_env%list_of_atoms)
1030 DO ispin = 1, dcdr_env%nspins
1034 DEALLOCATE (dcdr_env%momo_fm_struct)
1035 DEALLOCATE (dcdr_env%likemos_fm_struct)
1037 DEALLOCATE (dcdr_env%deltar)
1038 DEALLOCATE (dcdr_env%delta_basis_function)
1040 IF (dcdr_env%localized_psi0)
THEN
1042 DEALLOCATE (dcdr_env%centers_set(1)%array)
1043 DEALLOCATE (dcdr_env%center_list(1)%array)
1044 DEALLOCATE (dcdr_env%centers_set)
1045 DEALLOCATE (dcdr_env%center_list)
1046 DEALLOCATE (dcdr_env%apt_subset)
1049 DEALLOCATE (dcdr_env%apt_el_dcdr)
1050 DEALLOCATE (dcdr_env%apt_nuc_dcdr)
1051 DEALLOCATE (dcdr_env%apt_total_dcdr)
1052 IF (dcdr_env%localized_psi0)
THEN
1053 DEALLOCATE (dcdr_env%apt_el_dcdr_per_center)
1054 DEALLOCATE (dcdr_env%apt_el_dcdr_per_subset)
1064 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.
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, 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, 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...