17 dbcsr_type_antisymmetric,&
18 dbcsr_type_no_symmetry
71#include "./base/base_uses.f90"
80 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_vcd_utils'
82 REAL(dp),
DIMENSION(3, 3, 3),
PARAMETER :: Levi_Civita = reshape((/ &
83 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, &
84 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, &
85 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/))
99 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_env_init'
101 INTEGER :: handle, i, idir, ispin, j, natom, &
102 nspins, output_unit, reference, &
105 REAL(kind=dp),
DIMENSION(:),
POINTER :: ref_point
108 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_ks, my_matrix_hr_1d
111 POINTER :: sab_all, sab_orb, sap_ppnl
113 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
117 CALL timeset(routinen, handle)
118 vcd_env%do_mfp = .false.
121 NULLIFY (logger, vcd_section, lr_section)
125 extension=
".data", middle_name=
"vcd", log_filename=.false., &
126 file_position=
"REWIND", file_status=
"REPLACE")
130 extension=
".linresLog")
131 unit_number =
cp_print_key_unit_nr(logger, lr_section,
"PRINT%PROGRAM_RUN_INFO", extension=
".linresLog")
137 IF (output_unit > 0)
THEN
138 WRITE (output_unit,
"(/,T20,A,/)")
"*** Start NVPT/MFPT calculation ***"
145 CALL section_vals_val_get(vcd_section,
"ORIGIN_DEPENDENT_MFP", l_val=vcd_env%origin_dependent_op_mfp)
148 vcd_env%magnetic_origin = 0._dp
149 vcd_env%spatial_origin = 0._dp
157 cpabort(
"User-defined reference point should be given explicitly")
161 reference=reference, &
171 cpabort(
"User-defined reference point should be given explicitly")
175 reference=reference, &
178 IF (vcd_env%distributed_origin .AND. any(vcd_env%magnetic_origin /= vcd_env%spatial_origin))
THEN
179 cpwarn(
"The magnetic and spatial origins don't match")
183 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
184 'The reference point is', vcd_env%dcdr_env%ref_point
185 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
186 'The magnetic origin is', vcd_env%magnetic_origin
187 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,3F10.6)") &
188 'The velocity origin is', vcd_env%spatial_origin
190 vcd_env%magnetic_origin_atom = vcd_env%magnetic_origin
191 vcd_env%spatial_origin_atom = vcd_env%spatial_origin
195 dft_control=dft_control, &
199 particle_set=particle_set, &
200 matrix_ks=matrix_ks, &
202 qs_kind_set=qs_kind_set)
204 natom =
SIZE(particle_set)
205 nspins = dft_control%nspins
207 ALLOCATE (vcd_env%apt_el_nvpt(3, 3, natom))
208 ALLOCATE (vcd_env%apt_nuc_nvpt(3, 3, natom))
209 ALLOCATE (vcd_env%apt_total_nvpt(3, 3, natom))
210 ALLOCATE (vcd_env%aat_atom_nvpt(3, 3, natom))
211 ALLOCATE (vcd_env%aat_atom_mfp(3, 3, natom))
212 vcd_env%apt_el_nvpt = 0._dp
213 vcd_env%apt_nuc_nvpt = 0._dp
214 vcd_env%apt_total_nvpt = 0._dp
215 vcd_env%aat_atom_nvpt = 0._dp
216 vcd_env%aat_atom_mfp = 0._dp
218 ALLOCATE (vcd_env%dCV(nspins))
219 ALLOCATE (vcd_env%dCV_prime(nspins))
220 ALLOCATE (vcd_env%op_dV(nspins))
221 ALLOCATE (vcd_env%op_dB(nspins))
223 CALL cp_fm_create(vcd_env%dCV(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
224 CALL cp_fm_create(vcd_env%dCV_prime(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
225 CALL cp_fm_create(vcd_env%op_dV(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
226 CALL cp_fm_create(vcd_env%op_dB(ispin), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
229 ALLOCATE (vcd_env%dCB(3))
230 ALLOCATE (vcd_env%dCB_prime(3))
232 CALL cp_fm_create(vcd_env%dCB(i), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
233 CALL cp_fm_create(vcd_env%dCB_prime(i), vcd_env%dcdr_env%likemos_fm_struct(1)%struct)
264 CALL dbcsr_init_p(vcd_env%moments_der_right(i, idir)%matrix)
265 CALL dbcsr_init_p(vcd_env%moments_der_left(i, idir)%matrix)
267 CALL dbcsr_create(vcd_env%moments_der(i, idir)%matrix, template=matrix_ks(1)%matrix, &
268 matrix_type=dbcsr_type_antisymmetric)
270 CALL dbcsr_set(vcd_env%moments_der(i, idir)%matrix, 0.0_dp)
273 CALL dbcsr_copy(vcd_env%moments_der_right(i, idir)%matrix, &
274 vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
275 CALL dbcsr_copy(vcd_env%moments_der_left(i, idir)%matrix, &
276 vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
283 CALL dbcsr_copy(vcd_env%matrix_difdip2(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
284 CALL dbcsr_set(vcd_env%matrix_difdip2(i, j)%matrix, 0.0_dp)
286 CALL dbcsr_init_p(vcd_env%matrix_nosym_temp_33(i, j)%matrix)
287 CALL dbcsr_create(vcd_env%matrix_nosym_temp_33(i, j)%matrix, template=matrix_ks(1)%matrix, &
288 matrix_type=dbcsr_type_no_symmetry)
290 CALL dbcsr_set(vcd_env%matrix_nosym_temp_33(i, j)%matrix, 0._dp)
292 CALL dbcsr_init_p(vcd_env%matrix_nosym_temp2_33(i, j)%matrix)
293 CALL dbcsr_create(vcd_env%matrix_nosym_temp2_33(i, j)%matrix, template=matrix_ks(1)%matrix, &
294 matrix_type=dbcsr_type_no_symmetry)
296 CALL dbcsr_set(vcd_env%matrix_nosym_temp2_33(i, j)%matrix, 0._dp)
300 CALL dbcsr_copy(vcd_env%matrix_dSdV(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
302 CALL dbcsr_copy(vcd_env%matrix_dSdB(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
306 CALL dbcsr_init_p(vcd_env%matrix_hxc_dsdv(ispin)%matrix)
307 CALL dbcsr_copy(vcd_env%matrix_hxc_dsdv(ispin)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
314 CALL dbcsr_copy(vcd_env%dipvel_ao(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
317 CALL dbcsr_copy(vcd_env%dipvel_ao_delta(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
323 CALL dbcsr_create(vcd_env%hcom(i)%matrix, template=matrix_ks(1)%matrix, &
324 matrix_type=dbcsr_type_antisymmetric)
328 CALL dbcsr_create(vcd_env%matrix_rxrv(i)%matrix, template=matrix_ks(1)%matrix, &
329 matrix_type=dbcsr_type_antisymmetric)
334 CALL dbcsr_copy(vcd_env%matrix_rcomr(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
336 CALL dbcsr_copy(vcd_env%matrix_rrcom(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
338 CALL dbcsr_copy(vcd_env%matrix_dcom(i, j)%matrix, matrix_ks(1)%matrix)
339 CALL dbcsr_set(vcd_env%matrix_dcom(i, j)%matrix, 0._dp)
342 CALL dbcsr_copy(vcd_env%matrix_r_rxvr(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
343 CALL dbcsr_set(vcd_env%matrix_r_rxvr(i, j)%matrix, 0._dp)
346 CALL dbcsr_copy(vcd_env%matrix_rxvr_r(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
347 CALL dbcsr_set(vcd_env%matrix_rxvr_r(i, j)%matrix, 0._dp)
349 CALL dbcsr_init_p(vcd_env%matrix_r_doublecom(i, j)%matrix)
350 CALL dbcsr_copy(vcd_env%matrix_r_doublecom(i, j)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
351 CALL dbcsr_set(vcd_env%matrix_r_doublecom(i, j)%matrix, 0._dp)
359 CALL dbcsr_copy(vcd_env%matrix_hr(ispin, i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
362 CALL dbcsr_copy(vcd_env%matrix_rh(ispin, i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
369 CALL dbcsr_copy(vcd_env%matrix_drpnl(i)%matrix, vcd_env%dcdr_env%matrix_nosym_temp(1)%matrix)
374 my_matrix_hr_1d => vcd_env%matrix_hr(1, 1:3)
375 CALL build_rpnl_matrix(my_matrix_hr_1d, qs_kind_set, particle_set, sab_all, sap_ppnl, &
376 dft_control%qs_control%eps_ppnl, cell, [0._dp, 0._dp, 0._dp], &
378 CALL build_tr_matrix(my_matrix_hr_1d, qs_env, qs_kind_set,
"ORB", sab_all, &
379 direction_or=.true., rc=[0._dp, 0._dp, 0._dp])
380 CALL build_rcore_matrix(my_matrix_hr_1d, qs_env, qs_kind_set,
"ORB", sab_all, [0._dp, 0._dp, 0._dp])
383 my_matrix_hr_1d => vcd_env%matrix_rh(1, 1:3)
384 CALL build_rpnl_matrix(my_matrix_hr_1d, qs_kind_set, particle_set, sab_all, sap_ppnl, &
385 dft_control%qs_control%eps_ppnl, cell, [0._dp, 0._dp, 0._dp], &
386 direction_or=.false.)
387 CALL build_tr_matrix(my_matrix_hr_1d, qs_env, qs_kind_set,
"ORB", sab_all, &
388 direction_or=.false., rc=[0._dp, 0._dp, 0._dp])
389 CALL build_rcore_matrix(my_matrix_hr_1d, qs_env, qs_kind_set,
"ORB", sab_all, [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, cell=cell, matrix_rv=vcd_env%hcom)
397 CALL build_com_rpnl_r(vcd_env%matrix_rcomr, qs_kind_set, sab_all, sap_ppnl, &
398 dft_control%qs_control%eps_ppnl, particle_set, cell, .true.)
399 CALL build_com_rpnl_r(vcd_env%matrix_rrcom, qs_kind_set, sab_all, sap_ppnl, &
400 dft_control%qs_control%eps_ppnl, particle_set, cell, .false.)
408 nmoments_der=2, nmoments=0, ref_point=[0._dp, 0._dp, 0._dp])
411 CALL build_com_mom_nl(qs_kind_set, sab_orb, sap_ppnl, dft_control%qs_control%eps_ppnl, &
412 particle_set, matrix_rxrv=vcd_env%matrix_rxrv, ref_point=[0._dp, 0._dp, 0._dp], &
415 CALL build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, dft_control%qs_control%eps_ppnl, &
416 particle_set, ref_point=[0._dp, 0._dp, 0._dp], cell=cell, &
417 matrix_r_rxvr=vcd_env%matrix_r_rxvr)
419 CALL build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, dft_control%qs_control%eps_ppnl, &
420 particle_set, ref_point=[0._dp, 0._dp, 0._dp], cell=cell, &
421 matrix_rxvr_r=vcd_env%matrix_rxvr_r)
426 "PRINT%PROGRAM_RUN_INFO")
428 CALL timestop(handle)
443 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_env_cleanup'
447 CALL timeset(routinen, handle)
452 DEALLOCATE (vcd_env%apt_el_nvpt)
453 DEALLOCATE (vcd_env%apt_nuc_nvpt)
454 DEALLOCATE (vcd_env%apt_total_nvpt)
455 DEALLOCATE (vcd_env%aat_atom_nvpt)
456 DEALLOCATE (vcd_env%aat_atom_mfp)
493 CALL timestop(handle)
510 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
511 INTEGER,
INTENT(IN) :: lambda, beta
512 CHARACTER(LEN=*) :: tag
514 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_read_restart'
516 CHARACTER(LEN=default_path_length) :: filename
517 CHARACTER(LEN=default_string_length) :: my_middle
518 INTEGER :: beta_tmp, handle, i, i_block, ia, ie, iostat, iounit, ispin, j, lambda_tmp, &
519 max_block, n_rep_val, nao, nao_tmp, nmo, nmo_tmp, nspins, nspins_tmp, rst_unit
521 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
530 CALL timeset(routinen, handle)
532 NULLIFY (mos, para_env, logger, print_key, vecbuffer)
536 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
545 IF (para_env%is_source())
THEN
550 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
553 IF (n_rep_val > 0)
THEN
556 filename = filename(ia:ie)//trim(my_middle)//
".lr"
561 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
567 CALL open_file(file_name=trim(filename), &
568 file_action=
"READ", &
569 file_form=
"UNFORMATTED", &
570 file_position=
"REWIND", &
572 unit_number=rst_unit)
574 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
575 "LINRES| Reading response wavefunctions from the restart file <"//trim(adjustl(filename))//
">"
577 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
578 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
587 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
589 ALLOCATE (vecbuffer(nao, max_block))
592 IF (rst_unit > 0)
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
593 CALL para_env%bcast(iostat)
595 CALL para_env%bcast(beta_tmp)
596 CALL para_env%bcast(lambda_tmp)
597 CALL para_env%bcast(nspins_tmp)
598 CALL para_env%bcast(nao_tmp)
602 IF (nspins_tmp .NE. nspins)
THEN
603 cpabort(
"nspins not consistent")
605 IF (nao_tmp .NE. nao) cpabort(
"nao not consistent")
608 IF (lambda_tmp .NE. lambda) cpabort(
"lambda not consistent")
609 IF (beta_tmp .NE. beta) cpabort(
"beta not consistent")
612 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
615 IF (rst_unit > 0)
READ (rst_unit) nmo_tmp
616 CALL para_env%bcast(nmo_tmp)
617 IF (nmo_tmp .NE. nmo) cpabort(
"nmo not consistent")
620 DO i = 1, nmo, max(max_block, 1)
621 i_block = min(max_block, nmo - i + 1)
623 IF (rst_unit > 0)
READ (rst_unit) vecbuffer(1:nao, j)
625 CALL para_env%bcast(vecbuffer)
630 IF (iostat /= 0)
THEN
631 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
632 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
635 DEALLOCATE (vecbuffer)
639 IF (para_env%is_source())
THEN
643 CALL timestop(handle)
660 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
661 INTEGER,
INTENT(IN) :: lambda, beta
662 CHARACTER(LEN=*) :: tag
664 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_write_restart'
666 CHARACTER(LEN=default_path_length) :: filename
667 CHARACTER(LEN=default_string_length) :: my_middle, my_pos, my_status
668 INTEGER :: handle, i, i_block, ia, ie, iounit, &
669 ispin, j, max_block, nao, nmo, nspins, &
671 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
678 NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
680 CALL timeset(routinen, handle)
685 used_print_key=print_key), &
689 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
697 my_status =
"REPLACE"
700 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
703 extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
704 file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
707 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
710 WRITE (unit=iounit, fmt=
"(T2,A)") &
711 "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">"
718 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
719 ALLOCATE (vecbuffer(nao, max_block))
721 IF (rst_unit > 0)
WRITE (rst_unit) lambda, beta, nspins, nao
726 IF (rst_unit > 0)
WRITE (rst_unit) nmo
728 DO i = 1, nmo, max(max_block, 1)
729 i_block = min(max_block, nmo - i + 1)
735 IF (rst_unit > 0)
WRITE (rst_unit) vecbuffer(1:nao, j)
740 DEALLOCATE (vecbuffer)
746 CALL timestop(handle)
760 CHARACTER(len=*),
PARAMETER :: routinen =
'vcd_print'
762 CHARACTER(LEN=default_string_length) :: description
763 INTEGER :: alpha, beta, delta,
gamma, handle, i, l, &
764 lambda, natom, nsubset, output_unit
765 REAL(dp) :: mean, standard_deviation, &
766 standard_deviation_sum
767 REAL(dp),
DIMENSION(:, :, :),
POINTER :: apt_el_dcdr, apt_el_nvpt, apt_nuc_dcdr, &
768 apt_nuc_nvpt, apt_total_dcdr, &
770 REAL(dp),
DIMENSION(:, :, :, :),
POINTER :: apt_center_dcdr, apt_subset_dcdr
771 REAL(kind=dp),
DIMENSION(3, 3) :: sum_rule_0, sum_rule_0_second, &
772 sum_rule_1, sum_rule_2, &
773 sum_rule_2_second, sum_rule_3_mfp, &
781 CALL timeset(routinen, handle)
790 NULLIFY (particle_set)
791 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
792 natom =
SIZE(particle_set)
793 nsubset =
SIZE(molecule_set)
795 apt_el_dcdr => vcd_env%dcdr_env%apt_el_dcdr
796 apt_nuc_dcdr => vcd_env%dcdr_env%apt_nuc_dcdr
797 apt_total_dcdr => vcd_env%dcdr_env%apt_total_dcdr
798 apt_subset_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_subset
799 apt_center_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_center
801 apt_el_nvpt => vcd_env%apt_el_nvpt
802 apt_nuc_nvpt => vcd_env%apt_nuc_nvpt
803 apt_total_nvpt => vcd_env%apt_total_nvpt
805 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
806 'APT | Write the final APT matrix per atom (Position perturbation)'
808 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
809 'APT | Atom', l,
' - GAPT ', &
810 (apt_total_dcdr(1, 1, l) &
811 + apt_total_dcdr(2, 2, l) &
812 + apt_total_dcdr(3, 3, l))/3._dp
814 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)")
"APT | ", apt_total_dcdr(i, :, l)
818 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
819 'NVP | Write the final APT matrix per atom (Velocity perturbation)'
821 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
822 'NVP | Atom', l,
' - GAPT ', &
823 (apt_total_nvpt(1, 1, l) &
824 + apt_total_nvpt(2, 2, l) &
825 + apt_total_nvpt(3, 3, l))/3._dp
827 IF (vcd_env%output_unit > 0) &
828 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
829 "NVP | ", apt_total_nvpt(i, :, l)
833 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
834 'NVP | Write the final AAT matrix per atom (Velocity perturbation)'
836 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
839 IF (vcd_env%output_unit > 0) &
840 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
841 "NVP | ", vcd_env%aat_atom_nvpt(i, :, l)
845 IF (vcd_env%do_mfp)
THEN
846 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
847 'MFP | Write the final AAT matrix per atom (Magnetic Field perturbation)'
849 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
852 IF (vcd_env%output_unit > 0) &
853 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
854 "MFP | ", vcd_env%aat_atom_mfp(i, :, l)
861 description =
"[DIPOLE]"
862 CALL get_results(results=results, description=description, values=vcd_env%dcdr_env%dipole_pos(1:3))
868 sum_rule_0_second = 0._dp
869 sum_rule_2_second = 0._dp
870 sum_rule_3_second = 0._dp
871 sum_rule_3_mfp = 0._dp
872 standard_deviation = 0._dp
873 standard_deviation_sum = 0._dp
879 sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
880 + apt_total_dcdr(alpha, beta, lambda)
881 sum_rule_0_second(alpha, beta) = sum_rule_0_second(alpha, beta) &
882 + apt_total_nvpt(alpha, beta, lambda)
887 sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
888 + levi_civita(alpha, beta,
gamma)*vcd_env%dcdr_env%dipole_pos(
gamma)
895 sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
896 + levi_civita(beta,
gamma, delta) &
897 *particle_set(lambda)%r(
gamma) &
898 *apt_total_dcdr(delta, alpha, lambda)
899 sum_rule_2_second(alpha, beta) = sum_rule_2_second(alpha, beta) &
900 + levi_civita(beta,
gamma, delta) &
901 *particle_set(lambda)%r(
gamma) &
902 *apt_total_nvpt(delta, alpha, lambda)
909 sum_rule_3_second(alpha, beta) = sum_rule_3_second(alpha, beta) &
910 + vcd_env%aat_atom_nvpt(alpha, beta, lambda)
914 IF (vcd_env%do_mfp)
THEN
917 sum_rule_3_mfp(alpha, beta) = sum_rule_3_mfp(alpha, beta) &
918 + vcd_env%aat_atom_mfp(alpha, beta, lambda)
925 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)")
"APT | Position perturbation sum rules"
926 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)") &
927 "APT |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
928 standard_deviation_sum = 0._dp
931 mean = (sum_rule_1(alpha, beta) + sum_rule_2(alpha, beta) + sum_rule_3_mfp(alpha, beta))/3
932 standard_deviation = &
933 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2(alpha, beta)**2 + sum_rule_3_mfp(alpha, beta)**2)/3 &
935 standard_deviation_sum = standard_deviation_sum + standard_deviation
937 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
938 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
941 sum_rule_0(alpha, beta), &
942 sum_rule_1(alpha, beta), &
943 sum_rule_2(alpha, beta), &
944 sum_rule_3_mfp(alpha, beta), &
948 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
950 IF (vcd_env%output_unit > 0)
THEN
951 WRITE (vcd_env%output_unit,
"(A)")
"NVP | Velocity perturbation sum rules"
952 WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)")
"NVP |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
955 standard_deviation_sum = 0._dp
958 mean = (sum_rule_1(alpha, beta) + sum_rule_2_second(alpha, beta) + sum_rule_3_second(alpha, beta))/3
959 standard_deviation = &
960 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2_second(alpha, beta)**2 + sum_rule_3_second(alpha, beta)**2)/3 &
962 standard_deviation_sum = standard_deviation_sum + standard_deviation
963 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
964 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
968 sum_rule_0_second(alpha, beta), &
969 sum_rule_1(alpha, beta), &
970 sum_rule_2_second(alpha, beta), &
971 sum_rule_3_second(alpha, beta), &
975 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
977 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_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
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, 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.
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)
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)
Calculation of the linear momentum matrix <mu|∂|nu> over Cartesian Gaussian functions.
subroutine, public build_rpnl_matrix(matrix_rv, qs_kind_set, particle_set, sab_all, sap_ppnl, eps_ppnl, cell, ref_point, direction_or)
Product of r with V_nl. Adapted from build_com_rpnl.
subroutine, public build_matrix_r_vhxc(matrix_rv, qs_env, rc)
Commutator of the Hartree+XC potentials with r.
subroutine, public build_rcore_matrix(matrix_rcore, qs_env, qs_kind_set, basis_type, sab_nl, rf)
Commutator of the of the local part of the pseudopotential with r.
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_tr_matrix(matrix_tr, qs_env, qs_kind_set, basis_type, sab_nl, direction_or, rc)
Calculation of the product Tr or rT over Cartesian Gaussian functions.
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 ...