17 dbcsr_type_antisymmetric,&
18 dbcsr_type_no_symmetry
68#include "./base/base_uses.f90"
77 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_vcd_utils'
79 REAL(dp),
DIMENSION(3, 3, 3),
PARAMETER :: Levi_Civita = reshape([ &
80 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, &
81 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, &
82 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], [3, 3, 3])
96 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_env_init'
98 INTEGER :: handle, i, idir, ispin, j, natom, &
99 nspins, output_unit, reference, &
102 REAL(kind=dp),
DIMENSION(:),
POINTER :: ref_point
108 POINTER :: sab_all, sab_orb, sap_ppnl
110 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
114 CALL timeset(routinen, handle)
115 vcd_env%do_mfp = .false.
118 NULLIFY (logger, vcd_section, lr_section)
122 extension=
".data", middle_name=
"vcd", log_filename=.false., &
123 file_position=
"REWIND", file_status=
"REPLACE")
127 extension=
".linresLog")
128 unit_number =
cp_print_key_unit_nr(logger, lr_section,
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
134 IF (output_unit > 0)
THEN
135 WRITE (output_unit,
"(/,T20,A,/)")
"*** Start NVPT/MFPT calculation ***"
142 CALL section_vals_val_get(vcd_section,
"ORIGIN_DEPENDENT_MFP", l_val=vcd_env%origin_dependent_op_mfp)
145 vcd_env%magnetic_origin = 0._dp
146 vcd_env%spatial_origin = 0._dp
154 cpabort(
"User-defined reference point should be given explicitly")
159 reference=reference, &
169 cpabort(
"User-defined reference point should be given explicitly")
174 reference=reference, &
177 IF (vcd_env%distributed_origin .AND. any(vcd_env%magnetic_origin /= vcd_env%spatial_origin))
THEN
178 cpwarn(
"The magnetic and spatial origins don't match")
182 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
183 'The reference point is', vcd_env%dcdr_env%ref_point
184 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
185 'The magnetic origin is', vcd_env%magnetic_origin
186 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
187 'The velocity origin is', vcd_env%spatial_origin
189 vcd_env%magnetic_origin_atom = vcd_env%magnetic_origin
190 vcd_env%spatial_origin_atom = vcd_env%spatial_origin
194 dft_control=dft_control, &
198 particle_set=particle_set, &
199 matrix_ks=matrix_ks, &
201 qs_kind_set=qs_kind_set)
203 natom =
SIZE(particle_set)
204 nspins = dft_control%nspins
206 ALLOCATE (vcd_env%apt_el_nvpt(3, 3, natom))
207 ALLOCATE (vcd_env%apt_nuc_nvpt(3, 3, natom))
208 ALLOCATE (vcd_env%apt_total_nvpt(3, 3, natom))
209 ALLOCATE (vcd_env%aat_atom_nvpt(3, 3, natom))
210 ALLOCATE (vcd_env%aat_atom_mfp(3, 3, natom))
211 vcd_env%apt_el_nvpt = 0._dp
212 vcd_env%apt_nuc_nvpt = 0._dp
213 vcd_env%apt_total_nvpt = 0._dp
214 vcd_env%aat_atom_nvpt = 0._dp
215 vcd_env%aat_atom_mfp = 0._dp
217 ALLOCATE (vcd_env%dCV(nspins))
218 ALLOCATE (vcd_env%dCV_prime(nspins))
219 ALLOCATE (vcd_env%op_dV(nspins))
220 ALLOCATE (vcd_env%op_dB(nspins))
222 CALL cp_fm_create(vcd_env%dCV(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
223 CALL cp_fm_create(vcd_env%dCV_prime(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
224 CALL cp_fm_create(vcd_env%op_dV(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
225 CALL cp_fm_create(vcd_env%op_dB(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
228 ALLOCATE (vcd_env%dCB(3))
229 ALLOCATE (vcd_env%dCB_prime(3))
231 CALL cp_fm_create(vcd_env%dCB(i), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
232 CALL cp_fm_create(vcd_env%dCB_prime(i), vcd_env%dcdr_env%likemos_fm_struct(1)%struct, set_zero=.true.)
263 CALL dbcsr_init_p(vcd_env%moments_der_right(i, idir)%matrix)
264 CALL dbcsr_init_p(vcd_env%moments_der_left(i, idir)%matrix)
266 CALL dbcsr_create(vcd_env%moments_der(i, idir)%matrix, template=matrix_ks(1)%matrix, &
267 matrix_type=dbcsr_type_antisymmetric)
269 CALL dbcsr_set(vcd_env%moments_der(i, idir)%matrix, 0.0_dp)
272 CALL dbcsr_copy(vcd_env%moments_der_right(i, idir)%matrix, &
273 vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
274 CALL dbcsr_copy(vcd_env%moments_der_left(i, idir)%matrix, &
275 vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
282 CALL dbcsr_copy(vcd_env%matrix_difdip2(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
283 CALL dbcsr_set(vcd_env%matrix_difdip2(i, j)%matrix, 0.0_dp)
285 CALL dbcsr_init_p(vcd_env%matrix_nosym_temp_33(i, j)%matrix)
286 CALL dbcsr_create(vcd_env%matrix_nosym_temp_33(i, j)%matrix, template=matrix_ks(1)%matrix, &
287 matrix_type=dbcsr_type_no_symmetry)
289 CALL dbcsr_set(vcd_env%matrix_nosym_temp_33(i, j)%matrix, 0._dp)
291 CALL dbcsr_init_p(vcd_env%matrix_nosym_temp2_33(i, j)%matrix)
292 CALL dbcsr_create(vcd_env%matrix_nosym_temp2_33(i, j)%matrix, template=matrix_ks(1)%matrix, &
293 matrix_type=dbcsr_type_no_symmetry)
295 CALL dbcsr_set(vcd_env%matrix_nosym_temp2_33(i, j)%matrix, 0._dp)
299 CALL dbcsr_copy(vcd_env%matrix_dSdV(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
301 CALL dbcsr_copy(vcd_env%matrix_dSdB(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
305 CALL dbcsr_init_p(vcd_env%matrix_hxc_dsdv(ispin)%matrix)
306 CALL dbcsr_copy(vcd_env%matrix_hxc_dsdv(ispin)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
313 CALL dbcsr_copy(vcd_env%dipvel_ao(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
316 CALL dbcsr_copy(vcd_env%dipvel_ao_delta(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
322 CALL dbcsr_create(vcd_env%hcom(i)%matrix, template=matrix_ks(1)%matrix, &
323 matrix_type=dbcsr_type_antisymmetric)
327 CALL dbcsr_create(vcd_env%matrix_rxrv(i)%matrix, template=matrix_ks(1)%matrix, &
328 matrix_type=dbcsr_type_antisymmetric)
333 CALL dbcsr_copy(vcd_env%matrix_rcomr(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
335 CALL dbcsr_copy(vcd_env%matrix_rrcom(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
337 CALL dbcsr_copy(vcd_env%matrix_dcom(i, j)%matrix, matrix_ks(1)%matrix)
338 CALL dbcsr_set(vcd_env%matrix_dcom(i, j)%matrix, 0._dp)
341 CALL dbcsr_copy(vcd_env%matrix_r_rxvr(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
342 CALL dbcsr_set(vcd_env%matrix_r_rxvr(i, j)%matrix, 0._dp)
345 CALL dbcsr_copy(vcd_env%matrix_rxvr_r(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
346 CALL dbcsr_set(vcd_env%matrix_rxvr_r(i, j)%matrix, 0._dp)
348 CALL dbcsr_init_p(vcd_env%matrix_r_doublecom(i, j)%matrix)
349 CALL dbcsr_copy(vcd_env%matrix_r_doublecom(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
350 CALL dbcsr_set(vcd_env%matrix_r_doublecom(i, j)%matrix, 0._dp)
358 CALL dbcsr_copy(vcd_env%matrix_hr(ispin, i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
361 CALL dbcsr_copy(vcd_env%matrix_rh(ispin, i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
368 CALL dbcsr_copy(vcd_env%matrix_drpnl(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
377 CALL build_com_mom_nl(qs_kind_set, sab_orb, sap_ppnl, dft_control%qs_control%eps_ppnl, &
378 particle_set, cell=cell, matrix_rv=vcd_env%hcom)
380 CALL build_com_rpnl_r(vcd_env%matrix_rcomr, qs_kind_set, sab_all, sap_ppnl, &
381 dft_control%qs_control%eps_ppnl, particle_set, cell, .true.)
382 CALL build_com_rpnl_r(vcd_env%matrix_rrcom, qs_kind_set, sab_all, sap_ppnl, &
383 dft_control%qs_control%eps_ppnl, particle_set, cell, .false.)
391 nmoments_der=2, nmoments=0, ref_point=[0._dp, 0._dp, 0._dp])
394 CALL build_com_mom_nl(qs_kind_set, sab_orb, sap_ppnl, dft_control%qs_control%eps_ppnl, &
395 particle_set, matrix_rxrv=vcd_env%matrix_rxrv, ref_point=[0._dp, 0._dp, 0._dp], &
398 CALL build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, dft_control%qs_control%eps_ppnl, &
399 particle_set, ref_point=[0._dp, 0._dp, 0._dp], cell=cell, &
400 matrix_r_rxvr=vcd_env%matrix_r_rxvr, matrix_rxvr_r=vcd_env%matrix_rxvr_r)
405 "PRINT%PROGRAM_RUN_INFO")
407 CALL timestop(handle)
422 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_env_cleanup'
426 CALL timeset(routinen, handle)
431 DEALLOCATE (vcd_env%apt_el_nvpt)
432 DEALLOCATE (vcd_env%apt_nuc_nvpt)
433 DEALLOCATE (vcd_env%apt_total_nvpt)
434 DEALLOCATE (vcd_env%aat_atom_nvpt)
435 DEALLOCATE (vcd_env%aat_atom_mfp)
472 CALL timestop(handle)
489 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
490 INTEGER,
INTENT(IN) :: lambda, beta
491 CHARACTER(LEN=*) :: tag
493 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_read_restart'
495 CHARACTER(LEN=default_path_length) :: filename
496 CHARACTER(LEN=default_string_length) :: my_middle
497 INTEGER :: beta_tmp, handle, i, i_block, ia, ie, iostat, iounit, ispin, j, lambda_tmp, &
498 max_block, n_rep_val, nao, nao_tmp, nmo, nmo_tmp, nspins, nspins_tmp, rst_unit
500 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
509 CALL timeset(routinen, handle)
511 NULLIFY (mos, para_env, logger, print_key, vecbuffer)
515 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
524 IF (para_env%is_source())
THEN
529 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
532 IF (n_rep_val > 0)
THEN
535 filename = filename(ia:ie)//trim(my_middle)//
".lr"
540 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
546 CALL open_file(file_name=trim(filename), &
547 file_action=
"READ", &
548 file_form=
"UNFORMATTED", &
549 file_position=
"REWIND", &
551 unit_number=rst_unit)
553 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
554 "LINRES| Reading response wavefunctions from the restart file <"//trim(adjustl(filename))//
">"
556 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
557 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
566 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
568 ALLOCATE (vecbuffer(nao, max_block))
571 IF (rst_unit > 0)
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
572 CALL para_env%bcast(iostat)
574 CALL para_env%bcast(beta_tmp)
575 CALL para_env%bcast(lambda_tmp)
576 CALL para_env%bcast(nspins_tmp)
577 CALL para_env%bcast(nao_tmp)
581 IF (nspins_tmp /= nspins)
THEN
582 cpabort(
"nspins not consistent")
584 IF (nao_tmp /= nao) cpabort(
"nao not consistent")
587 IF (lambda_tmp /= lambda) cpabort(
"lambda not consistent")
588 IF (beta_tmp /= beta) cpabort(
"beta not consistent")
591 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
594 IF (rst_unit > 0)
READ (rst_unit) nmo_tmp
595 CALL para_env%bcast(nmo_tmp)
596 IF (nmo_tmp /= nmo) cpabort(
"nmo not consistent")
599 DO i = 1, nmo, max(max_block, 1)
600 i_block = min(max_block, nmo - i + 1)
602 IF (rst_unit > 0)
READ (rst_unit) vecbuffer(1:nao, j)
604 CALL para_env%bcast(vecbuffer)
609 IF (iostat /= 0)
THEN
610 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
611 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
614 DEALLOCATE (vecbuffer)
618 IF (para_env%is_source())
THEN
622 CALL timestop(handle)
639 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
640 INTEGER,
INTENT(IN) :: lambda, beta
641 CHARACTER(LEN=*) :: tag
643 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_write_restart'
645 CHARACTER(LEN=default_path_length) :: filename
646 CHARACTER(LEN=default_string_length) :: my_middle, my_pos, my_status
647 INTEGER :: handle, i, i_block, ia, ie, iounit, &
648 ispin, j, max_block, nao, nmo, nspins, &
650 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
657 NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
659 CALL timeset(routinen, handle)
664 used_print_key=print_key), &
668 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
676 my_status =
"REPLACE"
679 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
682 extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
683 file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
686 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
689 WRITE (unit=iounit, fmt=
"(T2,A)") &
690 "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">"
697 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
698 ALLOCATE (vecbuffer(nao, max_block))
700 IF (rst_unit > 0)
WRITE (rst_unit) lambda, beta, nspins, nao
705 IF (rst_unit > 0)
WRITE (rst_unit) nmo
707 DO i = 1, nmo, max(max_block, 1)
708 i_block = min(max_block, nmo - i + 1)
714 IF (rst_unit > 0)
WRITE (rst_unit) vecbuffer(1:nao, j)
719 DEALLOCATE (vecbuffer)
725 CALL timestop(handle)
739 CHARACTER(len=*),
PARAMETER :: routinen =
'vcd_print'
741 CHARACTER(LEN=default_string_length) :: description
742 INTEGER :: alpha, beta, delta,
gamma, handle, i, l, &
743 lambda, natom, nsubset, output_unit
744 REAL(dp) :: mean, standard_deviation, &
745 standard_deviation_sum
746 REAL(dp),
DIMENSION(:, :, :),
POINTER :: apt_el_dcdr, apt_el_nvpt, apt_nuc_dcdr, &
747 apt_nuc_nvpt, apt_total_dcdr, &
749 REAL(dp),
DIMENSION(:, :, :, :),
POINTER :: apt_center_dcdr, apt_subset_dcdr
750 REAL(kind=dp),
DIMENSION(3, 3) :: sum_rule_0, sum_rule_0_second, &
751 sum_rule_1, sum_rule_2, &
752 sum_rule_2_second, sum_rule_3_mfp, &
760 CALL timeset(routinen, handle)
769 NULLIFY (particle_set)
770 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
771 natom =
SIZE(particle_set)
772 nsubset =
SIZE(molecule_set)
774 apt_el_dcdr => vcd_env%dcdr_env%apt_el_dcdr
775 apt_nuc_dcdr => vcd_env%dcdr_env%apt_nuc_dcdr
776 apt_total_dcdr => vcd_env%dcdr_env%apt_total_dcdr
777 apt_subset_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_subset
778 apt_center_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_center
780 apt_el_nvpt => vcd_env%apt_el_nvpt
781 apt_nuc_nvpt => vcd_env%apt_nuc_nvpt
782 apt_total_nvpt => vcd_env%apt_total_nvpt
784 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
785 'APT | Write the final APT matrix per atom (Position perturbation)'
787 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
788 'APT | Atom', l,
' - GAPT ', &
789 (apt_total_dcdr(1, 1, l) &
790 + apt_total_dcdr(2, 2, l) &
791 + apt_total_dcdr(3, 3, l))/3._dp
793 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)")
"APT | ", apt_total_dcdr(i, :, l)
797 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
798 'NVP | Write the final APT matrix per atom (Velocity perturbation)'
800 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
801 'NVP | Atom', l,
' - GAPT ', &
802 (apt_total_nvpt(1, 1, l) &
803 + apt_total_nvpt(2, 2, l) &
804 + apt_total_nvpt(3, 3, l))/3._dp
806 IF (vcd_env%output_unit > 0)
THEN
807 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
808 "NVP | ", apt_total_nvpt(i, :, l)
813 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
814 'NVP | Write the final AAT matrix per atom (Velocity perturbation)'
816 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
819 IF (vcd_env%output_unit > 0)
THEN
820 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
821 "NVP | ", vcd_env%aat_atom_nvpt(i, :, l)
826 IF (vcd_env%do_mfp)
THEN
827 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
828 'MFP | Write the final AAT matrix per atom (Magnetic Field perturbation)'
830 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
833 IF (vcd_env%output_unit > 0)
THEN
834 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
835 "MFP | ", vcd_env%aat_atom_mfp(i, :, l)
843 description =
"[DIPOLE]"
844 CALL get_results(results=results, description=description, values=vcd_env%dcdr_env%dipole_pos(1:3))
850 sum_rule_0_second = 0._dp
851 sum_rule_2_second = 0._dp
852 sum_rule_3_second = 0._dp
853 sum_rule_3_mfp = 0._dp
854 standard_deviation = 0._dp
855 standard_deviation_sum = 0._dp
861 sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
862 + apt_total_dcdr(alpha, beta, lambda)
863 sum_rule_0_second(alpha, beta) = sum_rule_0_second(alpha, beta) &
864 + apt_total_nvpt(alpha, beta, lambda)
869 sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
870 + levi_civita(alpha, beta,
gamma)*vcd_env%dcdr_env%dipole_pos(
gamma)
877 sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
878 + levi_civita(beta,
gamma, delta) &
879 *particle_set(lambda)%r(
gamma) &
880 *apt_total_dcdr(delta, alpha, lambda)
881 sum_rule_2_second(alpha, beta) = sum_rule_2_second(alpha, beta) &
882 + levi_civita(beta,
gamma, delta) &
883 *particle_set(lambda)%r(
gamma) &
884 *apt_total_nvpt(delta, alpha, lambda)
891 sum_rule_3_second(alpha, beta) = sum_rule_3_second(alpha, beta) &
892 + vcd_env%aat_atom_nvpt(alpha, beta, lambda)
896 IF (vcd_env%do_mfp)
THEN
899 sum_rule_3_mfp(alpha, beta) = sum_rule_3_mfp(alpha, beta) &
900 + vcd_env%aat_atom_mfp(alpha, beta, lambda)
907 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)")
"APT | Position perturbation sum rules"
908 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)") &
909 "APT |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
910 standard_deviation_sum = 0._dp
913 mean = (sum_rule_1(alpha, beta) + sum_rule_2(alpha, beta) + sum_rule_3_mfp(alpha, beta))/3
914 standard_deviation = &
915 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2(alpha, beta)**2 + sum_rule_3_mfp(alpha, beta)**2)/3 &
917 standard_deviation_sum = standard_deviation_sum + standard_deviation
919 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
920 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
923 sum_rule_0(alpha, beta), &
924 sum_rule_1(alpha, beta), &
925 sum_rule_2(alpha, beta), &
926 sum_rule_3_mfp(alpha, beta), &
930 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
932 IF (vcd_env%output_unit > 0)
THEN
933 WRITE (vcd_env%output_unit,
"(A)")
"NVP | Velocity perturbation sum rules"
934 WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)")
"NVP |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
937 standard_deviation_sum = 0._dp
940 mean = (sum_rule_1(alpha, beta) + sum_rule_2_second(alpha, beta) + sum_rule_3_second(alpha, beta))/3
941 standard_deviation = &
942 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2_second(alpha, beta)**2 + sum_rule_3_second(alpha, beta)**2)/3 &
944 standard_deviation_sum = standard_deviation_sum + standard_deviation
945 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
946 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
950 sum_rule_0_second(alpha, beta), &
951 sum_rule_1(alpha, beta), &
952 sum_rule_2_second(alpha, beta), &
953 sum_rule_3_second(alpha, beta), &
957 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
959 CALL timestop(handle)
Handles all functions related to the CELL.
Calculation of the non-local pseudopotential contribution to the core Hamiltonian <a|V(non-local)|b> ...
subroutine, public build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, eps_ppnl, particle_set, cell, matrix_rv, matrix_rxrv, matrix_rrv, matrix_rvr, matrix_rrv_vrr, matrix_r_rxvr, matrix_rxvr_r, matrix_r_doublecom, pseudoatom, ref_point)
Calculate [r,Vnl] (matrix_rv), r x [r,Vnl] (matrix_rxrv) or [rr,Vnl] (matrix_rrv) in AO basis....
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.
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 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_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
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)
...
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
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 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.
Define the quickstep kind type and their sub types.
Type definitiona for linear response calculations.
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_moments_der_matrix(qs_env, moments_der, nmoments_der, nmoments, ref_point, moments, basis_type, minimum_image, ordered, lambda, deltar, neighbor_image)
Calculate right-hand sided derivatives of multipole moments, e. g. < a | xy d/dz | b > Optionally sto...
Define the neighbor list data types and the corresponding functionality.
subroutine, public build_lin_mom_matrix(qs_env, matrix, minimum_image)
Calculation of the linear momentum matrix <mu|∂|nu> over Cartesian Gaussian functions.
subroutine, public build_com_rpnl_r(matrix_rv, qs_kind_set, sab_all, sap_ppnl, eps_ppnl, particle_set, cell, direction_or)
Builds the [Vnl, r] * r from either side.
subroutine, public build_matrix_hr_rh(vcd_env, qs_env, rc)
Build the matrix Hr*delta_nu^\lambda - rH*delta_mu^\lambda.
subroutine, public vcd_print(vcd_env, qs_env)
Print the APTs, AATs, and sum rules.
subroutine, public vcd_env_cleanup(qs_env, vcd_env)
Deallocate the vcd environment.
subroutine, public vcd_write_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_write_restart.
subroutine, public vcd_env_init(vcd_env, qs_env)
Initialize the vcd environment.
subroutine, public vcd_read_restart(qs_env, linres_section, vec, lambda, beta, tag)
Copied from linres_read_restart.
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
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...