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, vcd_env%matrix_rrcom, qs_kind_set, sab_all, sap_ppnl, &
381 dft_control%qs_control%eps_ppnl, particle_set, cell)
389 nmoments_der=2, nmoments=0, ref_point=[0._dp, 0._dp, 0._dp])
392 CALL build_com_mom_nl(qs_kind_set, sab_orb, sap_ppnl, dft_control%qs_control%eps_ppnl, &
393 particle_set, matrix_rxrv=vcd_env%matrix_rxrv, ref_point=[0._dp, 0._dp, 0._dp], &
396 CALL build_com_mom_nl(qs_kind_set, sab_all, sap_ppnl, dft_control%qs_control%eps_ppnl, &
397 particle_set, ref_point=[0._dp, 0._dp, 0._dp], cell=cell, &
398 matrix_r_rxvr=vcd_env%matrix_r_rxvr, matrix_rxvr_r=vcd_env%matrix_rxvr_r)
403 "PRINT%PROGRAM_RUN_INFO")
405 CALL timestop(handle)
420 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_env_cleanup'
424 CALL timeset(routinen, handle)
429 DEALLOCATE (vcd_env%apt_el_nvpt)
430 DEALLOCATE (vcd_env%apt_nuc_nvpt)
431 DEALLOCATE (vcd_env%apt_total_nvpt)
432 DEALLOCATE (vcd_env%aat_atom_nvpt)
433 DEALLOCATE (vcd_env%aat_atom_mfp)
470 CALL timestop(handle)
487 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
488 INTEGER,
INTENT(IN) :: lambda, beta
489 CHARACTER(LEN=*) :: tag
491 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_read_restart'
493 CHARACTER(LEN=default_path_length) :: filename
494 CHARACTER(LEN=default_string_length) :: my_middle
495 INTEGER :: beta_tmp, handle, i, i_block, ia, ie, iostat, iounit, ispin, j, lambda_tmp, &
496 max_block, n_rep_val, nao, nao_tmp, nmo, nmo_tmp, nspins, nspins_tmp, rst_unit
498 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
507 CALL timeset(routinen, handle)
509 NULLIFY (mos, para_env, logger, print_key, vecbuffer)
513 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
522 IF (para_env%is_source())
THEN
527 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
530 IF (n_rep_val > 0)
THEN
533 filename = filename(ia:ie)//trim(my_middle)//
".lr"
538 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
544 CALL open_file(file_name=trim(filename), &
545 file_action=
"READ", &
546 file_form=
"UNFORMATTED", &
547 file_position=
"REWIND", &
549 unit_number=rst_unit)
551 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
552 "LINRES| Reading response wavefunctions from the restart file <"//trim(adjustl(filename))//
">"
554 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
555 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
564 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
566 ALLOCATE (vecbuffer(nao, max_block))
569 IF (rst_unit > 0)
READ (rst_unit, iostat=iostat) lambda_tmp, beta_tmp, nspins_tmp, nao_tmp
570 CALL para_env%bcast(iostat)
572 CALL para_env%bcast(beta_tmp)
573 CALL para_env%bcast(lambda_tmp)
574 CALL para_env%bcast(nspins_tmp)
575 CALL para_env%bcast(nao_tmp)
579 IF (nspins_tmp /= nspins)
THEN
580 cpabort(
"nspins not consistent")
582 IF (nao_tmp /= nao) cpabort(
"nao not consistent")
585 IF (lambda_tmp /= lambda) cpabort(
"lambda not consistent")
586 IF (beta_tmp /= beta) cpabort(
"beta not consistent")
589 CALL get_mo_set(mos(ispin), mo_coeff=mo_coeff)
592 IF (rst_unit > 0)
READ (rst_unit) nmo_tmp
593 CALL para_env%bcast(nmo_tmp)
594 IF (nmo_tmp /= nmo) cpabort(
"nmo not consistent")
597 DO i = 1, nmo, max(max_block, 1)
598 i_block = min(max_block, nmo - i + 1)
600 IF (rst_unit > 0)
READ (rst_unit) vecbuffer(1:nao, j)
602 CALL para_env%bcast(vecbuffer)
607 IF (iostat /= 0)
THEN
608 IF (iounit > 0)
WRITE (iounit,
"(T2,A)") &
609 "LINRES| Restart file <"//trim(adjustl(filename))//
"> not found"
612 DEALLOCATE (vecbuffer)
616 IF (para_env%is_source())
THEN
620 CALL timestop(handle)
637 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: vec
638 INTEGER,
INTENT(IN) :: lambda, beta
639 CHARACTER(LEN=*) :: tag
641 CHARACTER(LEN=*),
PARAMETER :: routinen =
'vcd_write_restart'
643 CHARACTER(LEN=default_path_length) :: filename
644 CHARACTER(LEN=default_string_length) :: my_middle, my_pos, my_status
645 INTEGER :: handle, i, i_block, ia, ie, iounit, &
646 ispin, j, max_block, nao, nmo, nspins, &
648 REAL(kind=dp),
DIMENSION(:, :),
POINTER :: vecbuffer
655 NULLIFY (logger, mo_coeff, mos, para_env, print_key, vecbuffer)
657 CALL timeset(routinen, handle)
662 used_print_key=print_key), &
666 "PRINT%PROGRAM_RUN_INFO", extension=
".Log")
674 my_status =
"REPLACE"
677 my_middle =
"RESTART-"//tag(ia:ie)//trim(
"-")//trim(adjustl(
cp_to_string(beta))) &
680 extension=
".lr", middle_name=trim(my_middle), file_status=trim(my_status), &
681 file_position=trim(my_pos), file_action=
"WRITE", file_form=
"UNFORMATTED")
684 extension=
".lr", middle_name=trim(my_middle), my_local=.false.)
687 WRITE (unit=iounit, fmt=
"(T2,A)") &
688 "LINRES| Writing response functions to the restart file <"//trim(adjustl(filename))//
">"
695 CALL cp_fm_get_info(mo_coeff, nrow_global=nao, ncol_block=max_block)
696 ALLOCATE (vecbuffer(nao, max_block))
698 IF (rst_unit > 0)
WRITE (rst_unit) lambda, beta, nspins, nao
703 IF (rst_unit > 0)
WRITE (rst_unit) nmo
705 DO i = 1, nmo, max(max_block, 1)
706 i_block = min(max_block, nmo - i + 1)
712 IF (rst_unit > 0)
WRITE (rst_unit) vecbuffer(1:nao, j)
717 DEALLOCATE (vecbuffer)
723 CALL timestop(handle)
737 CHARACTER(len=*),
PARAMETER :: routinen =
'vcd_print'
739 CHARACTER(LEN=default_string_length) :: description
740 INTEGER :: alpha, beta, delta,
gamma, handle, i, l, &
741 lambda, natom, nsubset, output_unit
742 REAL(dp) :: mean, standard_deviation, &
743 standard_deviation_sum
744 REAL(dp),
DIMENSION(:, :, :),
POINTER :: apt_el_dcdr, apt_el_nvpt, apt_nuc_dcdr, &
745 apt_nuc_nvpt, apt_total_dcdr, &
747 REAL(dp),
DIMENSION(:, :, :, :),
POINTER :: apt_center_dcdr, apt_subset_dcdr
748 REAL(kind=dp),
DIMENSION(3, 3) :: sum_rule_0, sum_rule_0_second, &
749 sum_rule_1, sum_rule_2, &
750 sum_rule_2_second, sum_rule_3_mfp, &
758 CALL timeset(routinen, handle)
767 NULLIFY (particle_set)
768 CALL get_qs_env(qs_env=qs_env, particle_set=particle_set, molecule_set=molecule_set)
769 natom =
SIZE(particle_set)
770 nsubset =
SIZE(molecule_set)
772 apt_el_dcdr => vcd_env%dcdr_env%apt_el_dcdr
773 apt_nuc_dcdr => vcd_env%dcdr_env%apt_nuc_dcdr
774 apt_total_dcdr => vcd_env%dcdr_env%apt_total_dcdr
775 apt_subset_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_subset
776 apt_center_dcdr => vcd_env%dcdr_env%apt_el_dcdr_per_center
778 apt_el_nvpt => vcd_env%apt_el_nvpt
779 apt_nuc_nvpt => vcd_env%apt_nuc_nvpt
780 apt_total_nvpt => vcd_env%apt_total_nvpt
782 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
783 'APT | Write the final APT matrix per atom (Position perturbation)'
785 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
786 'APT | Atom', l,
' - GAPT ', &
787 (apt_total_dcdr(1, 1, l) &
788 + apt_total_dcdr(2, 2, l) &
789 + apt_total_dcdr(3, 3, l))/3._dp
791 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)")
"APT | ", apt_total_dcdr(i, :, l)
795 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
796 'NVP | Write the final APT matrix per atom (Velocity perturbation)'
798 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3,A,F15.6)") &
799 'NVP | Atom', l,
' - GAPT ', &
800 (apt_total_nvpt(1, 1, l) &
801 + apt_total_nvpt(2, 2, l) &
802 + apt_total_nvpt(3, 3, l))/3._dp
804 IF (vcd_env%output_unit > 0)
THEN
805 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
806 "NVP | ", apt_total_nvpt(i, :, l)
811 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
812 'NVP | Write the final AAT matrix per atom (Velocity perturbation)'
814 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
817 IF (vcd_env%output_unit > 0)
THEN
818 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
819 "NVP | ", vcd_env%aat_atom_nvpt(i, :, l)
824 IF (vcd_env%do_mfp)
THEN
825 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)") &
826 'MFP | Write the final AAT matrix per atom (Magnetic Field perturbation)'
828 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,I3)") &
831 IF (vcd_env%output_unit > 0)
THEN
832 WRITE (vcd_env%output_unit,
"(A,F15.6,F15.6,F15.6)") &
833 "MFP | ", vcd_env%aat_atom_mfp(i, :, l)
841 description =
"[DIPOLE]"
842 CALL get_results(results=results, description=description, values=vcd_env%dcdr_env%dipole_pos(1:3))
848 sum_rule_0_second = 0._dp
849 sum_rule_2_second = 0._dp
850 sum_rule_3_second = 0._dp
851 sum_rule_3_mfp = 0._dp
852 standard_deviation = 0._dp
853 standard_deviation_sum = 0._dp
859 sum_rule_0(alpha, beta) = sum_rule_0(alpha, beta) &
860 + apt_total_dcdr(alpha, beta, lambda)
861 sum_rule_0_second(alpha, beta) = sum_rule_0_second(alpha, beta) &
862 + apt_total_nvpt(alpha, beta, lambda)
867 sum_rule_1(alpha, beta) = sum_rule_1(alpha, beta) &
868 + levi_civita(alpha, beta,
gamma)*vcd_env%dcdr_env%dipole_pos(
gamma)
875 sum_rule_2(alpha, beta) = sum_rule_2(alpha, beta) &
876 + levi_civita(beta,
gamma, delta) &
877 *particle_set(lambda)%r(
gamma) &
878 *apt_total_dcdr(delta, alpha, lambda)
879 sum_rule_2_second(alpha, beta) = sum_rule_2_second(alpha, beta) &
880 + levi_civita(beta,
gamma, delta) &
881 *particle_set(lambda)%r(
gamma) &
882 *apt_total_nvpt(delta, alpha, lambda)
889 sum_rule_3_second(alpha, beta) = sum_rule_3_second(alpha, beta) &
890 + vcd_env%aat_atom_nvpt(alpha, beta, lambda)
894 IF (vcd_env%do_mfp)
THEN
897 sum_rule_3_mfp(alpha, beta) = sum_rule_3_mfp(alpha, beta) &
898 + vcd_env%aat_atom_mfp(alpha, beta, lambda)
905 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A)")
"APT | Position perturbation sum rules"
906 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)") &
907 "APT |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
908 standard_deviation_sum = 0._dp
911 mean = (sum_rule_1(alpha, beta) + sum_rule_2(alpha, beta) + sum_rule_3_mfp(alpha, beta))/3
912 standard_deviation = &
913 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2(alpha, beta)**2 + sum_rule_3_mfp(alpha, beta)**2)/3 &
915 standard_deviation_sum = standard_deviation_sum + standard_deviation
917 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
918 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
921 sum_rule_0(alpha, beta), &
922 sum_rule_1(alpha, beta), &
923 sum_rule_2(alpha, beta), &
924 sum_rule_3_mfp(alpha, beta), &
928 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
930 IF (vcd_env%output_unit > 0)
THEN
931 WRITE (vcd_env%output_unit,
"(A)")
"NVP | Velocity perturbation sum rules"
932 WRITE (vcd_env%output_unit,
"(A,T19,A,T35,A,T50,A,T65,A)")
"NVP |",
" Total APT",
"Dipole",
"R * APT",
"AAT"
935 standard_deviation_sum = 0._dp
938 mean = (sum_rule_1(alpha, beta) + sum_rule_2_second(alpha, beta) + sum_rule_3_second(alpha, beta))/3
939 standard_deviation = &
940 sqrt((sum_rule_1(alpha, beta)**2 + sum_rule_2_second(alpha, beta)**2 + sum_rule_3_second(alpha, beta)**2)/3 &
942 standard_deviation_sum = standard_deviation_sum + standard_deviation
943 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit, &
944 "(A,I3,I3,F15.6,F15.6,F15.6,F15.6,F15.6)") &
948 sum_rule_0_second(alpha, beta), &
949 sum_rule_1(alpha, beta), &
950 sum_rule_2_second(alpha, beta), &
951 sum_rule_3_second(alpha, beta), &
955 IF (vcd_env%output_unit > 0)
WRITE (vcd_env%output_unit,
"(T73,F15.6)") standard_deviation_sum
957 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.
logical function, public file_exists(file_name)
Checks if a file exists, considering also the file discovery mechanism.
subroutine, public open_file(file_name, unit_number, file_status, file_form, file_action, file_position, file_pad, file_access, debug)
Opens a file and returns its logical unit number.
subroutine, public close_file(unit_number, file_status)
Closes an open file given by its logical unit number.
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, cmo_coeff)
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_rcomr, matrix_rrcom, qs_kind_set, sab_all, sap_ppnl, eps_ppnl, particle_set, cell)
Build the two ordered nonlocal second-position products.
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 ...