24 dbcsr_type_antisymmetric, dbcsr_type_no_symmetry
104#include "../base/base_uses.f90"
110 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'rt_propagation_output'
131 INTEGER,
INTENT(in) :: run_type
132 REAL(
dp),
INTENT(in),
OPTIONAL :: delta_iter, used_time
134 INTEGER :: i, n_electrons, n_proj, natom, nspin, &
135 output_unit, spin, unit_nr
136 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: first_sgf, last_sgf
137 INTEGER,
DIMENSION(:),
POINTER :: row_blk_sizes
139 REAL(
dp) :: orthonormality, strace, tot_rho_r, trace
140 REAL(kind=
dp),
DIMENSION(3) :: field, reference_point
141 REAL(kind=
dp),
DIMENSION(:),
POINTER :: qs_tot_rho_r
142 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: j_int
144 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
147 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, p_im, p_xyz, rho_new
151 POINTER :: sab_all, sab_orb
153 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
158 NULLIFY (logger, dft_control)
166 particle_set=particle_set, &
167 atomic_kind_set=atomic_kind_set, &
168 qs_kind_set=qs_kind_set, &
169 dft_control=dft_control, sab_all=sab_all, sab_orb=sab_orb, &
170 dbcsr_dist=dbcsr_dist)
175 n_electrons = n_electrons - dft_control%charge
177 CALL qs_rho_get(rho_struct=rho, tot_rho_r=qs_tot_rho_r)
184 IF (output_unit > 0)
THEN
185 WRITE (output_unit, fmt=
"(/,(T3,A,T40,I5))") &
186 "Information at iteration step:", rtp%iter
187 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
188 "Total electronic density (r-space): ", &
191 REAL(n_electrons,
dp)
192 WRITE (unit=output_unit, fmt=
"((T3,A,T59,F22.14))") &
193 "Total energy:", rtp%energy_new
195 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
196 "Energy difference to previous iteration step:", rtp%energy_new - rtp%energy_old
198 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
199 "Energy difference to initial state:", rtp%energy_new - rtp%energy_old
200 IF (
PRESENT(delta_iter)) &
201 WRITE (unit=output_unit, fmt=
"((T3,A,T61,E20.6))") &
202 "Convergence:", delta_iter
203 IF (rtp%converged)
THEN
205 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F12.2))") &
206 "Time needed for propagation:", used_time
207 WRITE (unit=output_unit, fmt=
"(/,(T3,A,3X,F16.14))") &
208 "CONVERGENCE REACHED", rtp%energy_new - rtp%energy_old
212 IF (rtp%converged)
THEN
213 IF (.NOT. rtp%linear_scaling)
THEN
214 CALL get_rtp(rtp=rtp, mos_new=mos_new)
215 CALL rt_calculate_orthonormality(orthonormality, &
216 mos_new, matrix_s(1)%matrix)
217 IF (output_unit > 0) &
218 WRITE (output_unit, fmt=
"(/,(T3,A,T60,F20.10))") &
219 "Max deviation from orthonormalization:", orthonormality
223 IF (output_unit > 0) &
226 "PRINT%PROGRAM_RUN_INFO")
228 IF (rtp%converged)
THEN
231 dft_section,
"REAL_TIME_PROPAGATION%PRINT%FIELD"),
cp_p_file)) &
232 CALL print_field_applied(qs_env, dft_section)
233 CALL make_moment(qs_env)
235 dft_section,
"REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS"),
cp_p_file))
THEN
236 CALL print_rtp_energy_components(qs_env, dft_section)
238 IF (.NOT. dft_control%qs_control%dftb)
THEN
239 CALL write_available_results(qs_env=qs_env, rtp=rtp)
242 IF (rtp%linear_scaling)
THEN
243 CALL get_rtp(rtp=rtp, rho_new=rho_new)
246 IF (dft_control%rtp_control%save_local_moments)
THEN
248 IF (dft_control%apply_efield_field)
THEN
249 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
250 rtp%fields(:, rtp%istep + rtp%i_start + 1) = cmplx(field(:), 0.0, kind=
dp)
252 IF (.NOT. dft_control%rtp_control%fixed_ions)
THEN
259 rtp%local_moments_work, rtp%moments(:, :, rtp%istep + rtp%i_start + 1))
261 rtp%times(rtp%istep + rtp%i_start + 1) = qs_env%sim_time
264 rtp%moments(:, :, rtp%istep + rtp%i_start + 1), qs_env%sim_time, rtp%track_imag_density)
268 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART"),
cp_p_file))
THEN
269 CALL write_rt_p_to_restart(rho_new, .false.)
272 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART_HISTORY"),
cp_p_file))
THEN
273 CALL write_rt_p_to_restart(rho_new, .true.)
275 IF (.NOT. dft_control%qs_control%dftb)
THEN
278 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
279 DO spin = 1,
SIZE(rho_new)/2
280 CALL rt_current(qs_env, rho_new(2*spin)%matrix, dft_section, spin,
SIZE(rho_new)/2)
285 CALL get_rtp(rtp=rtp, mos_new=mos_new)
286 IF (.NOT. dft_control%qs_control%dftb .AND. .NOT. dft_control%qs_control%xtb)
THEN
287 IF (rtp%track_imag_density)
THEN
288 NULLIFY (p_im, p_xyz)
293 natom =
SIZE(particle_set, 1)
294 ALLOCATE (first_sgf(natom))
295 ALLOCATE (last_sgf(natom))
297 first_sgf=first_sgf, &
299 ALLOCATE (row_blk_sizes(natom))
300 CALL dbcsr_convert_offsets_to_sizes(first_sgf, row_blk_sizes, last_sgf)
301 DEALLOCATE (first_sgf)
302 DEALLOCATE (last_sgf)
304 ALLOCATE (p_xyz(1)%matrix)
307 dist=dbcsr_dist, matrix_type=dbcsr_type_antisymmetric, &
308 row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes, &
313 ALLOCATE (p_xyz(i)%matrix)
318 DEALLOCATE (row_blk_sizes)
320 nspin =
SIZE(mos_new)/2
322 ALLOCATE (j_int(nspin, 3))
327 CALL dbcsr_create(tmp_ao, template=matrix_s(1)%matrix, matrix_type=dbcsr_type_no_symmetry, name=
"tmp")
335 CALL dbcsr_multiply(
"T",
"N", 1.0_dp, p_im(spin)%matrix, p_xyz(i)%matrix, &
338 strace = strace + trace
339 j_int(spin, i) = strace
345 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT_INT"),
cp_p_file))
THEN
349 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT", extension=
".dat", is_new_file=new_file)
350 IF (output_unit > 0)
THEN
352 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
353 j_int(1, 1:3), j_int(2, 1:3)
355 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
360 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT")
365 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
367 CALL rt_current(qs_env, p_im(spin)%matrix, dft_section, spin, nspin)
375 IF (dft_control%rtp_control%is_proj_mo)
THEN
376 DO n_proj = 1,
SIZE(dft_control%rtp_control%proj_mo_list)
378 dft_control%rtp_control%proj_mo_list(n_proj)%proj_mo, n_proj)
383 dft_section, qs_kind_set)
387 rtp%energy_old = rtp%energy_new
389 IF (.NOT. rtp%converged .AND. rtp%iter >= dft_control%rtp_control%max_iter) &
390 CALL cp_abort(__location__,
"EMD did not converge, either increase MAX_ITER "// &
391 "or use a smaller TIMESTEP")
403 SUBROUTINE rt_calculate_orthonormality(orthonormality, mos_new, matrix_s)
404 REAL(kind=
dp),
INTENT(out) :: orthonormality
405 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
406 TYPE(
dbcsr_type),
OPTIONAL,
POINTER :: matrix_s
408 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_calculate_orthonormality'
410 INTEGER :: handle, i, im, ispin, j, k, n, &
411 ncol_local, nrow_local, nspin, re
412 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
413 REAL(kind=
dp) :: alpha, max_alpha, max_beta
415 TYPE(
cp_fm_type) :: overlap_re, svec_im, svec_re
417 NULLIFY (tmp_fm_struct)
419 CALL timeset(routinen, handle)
421 nspin =
SIZE(mos_new)/2
431 nrow_global=n, ncol_global=k)
439 para_env=mos_new(re)%matrix_struct%para_env, &
440 context=mos_new(re)%matrix_struct%context)
446 svec_re, 0.0_dp, overlap_re)
448 svec_im, 1.0_dp, overlap_re)
453 CALL cp_fm_get_info(overlap_re, nrow_local=nrow_local, ncol_local=ncol_local, &
454 row_indices=row_indices, col_indices=col_indices)
457 alpha = overlap_re%local_data(i, j)
458 IF (row_indices(i) == col_indices(j)) alpha = alpha - 1.0_dp
459 max_alpha = max(max_alpha, abs(alpha))
464 CALL mos_new(1)%matrix_struct%para_env%max(max_alpha)
465 CALL mos_new(1)%matrix_struct%para_env%max(max_beta)
466 orthonormality = max_alpha
468 CALL timestop(handle)
470 END SUBROUTINE rt_calculate_orthonormality
484 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: delta_mos
485 REAL(
dp),
INTENT(out) :: delta_eps
487 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence'
488 REAL(kind=
dp),
PARAMETER ::
one = 1.0_dp,
zero = 0.0_dp
490 INTEGER :: handle, i, icol, im, ispin, j, lcol, &
491 lrow, nao, newdim, nmo, nspin, re
492 LOGICAL :: double_col, double_row
493 REAL(kind=
dp) :: alpha, max_alpha
496 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
498 NULLIFY (tmp_fm_struct)
500 CALL timeset(routinen, handle)
502 CALL get_rtp(rtp=rtp, mos_new=mos_new)
504 nspin =
SIZE(delta_mos)/2
507 DO i = 1,
SIZE(mos_new)
518 delta_mos(re)%matrix_struct, &
519 delta_mos(re)%matrix_struct%context, &
526 CALL cp_fm_get_info(delta_mos(re), ncol_local=lcol, ncol_global=nmo, &
533 work%local_data(:, icol) = delta_mos(re)%local_data(:, icol)
534 work%local_data(:, icol + lcol) = delta_mos(im)%local_data(:, icol)
542 para_env=delta_mos(re)%matrix_struct%para_env, &
543 context=delta_mos(re)%matrix_struct%context)
546 delta_mos(re)%matrix_struct%context, &
562 alpha = sqrt((work%local_data(i, j) + work2%local_data(i, j + lcol))**2 + &
563 (work%local_data(i, j + lcol) - work2%local_data(i, j))**2)
564 max_alpha = max(max_alpha, abs(alpha))
577 CALL delta_mos(1)%matrix_struct%para_env%max(max_alpha)
578 delta_eps = sqrt(max_alpha)
580 CALL timestop(handle)
596 REAL(
dp),
INTENT(out) :: delta_eps
598 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence_density'
599 REAL(kind=
dp),
PARAMETER ::
one = 1.0_dp,
zero = 0.0_dp
601 INTEGER :: col_atom, handle, i, ispin, row_atom
602 REAL(
dp) :: alpha, max_alpha
603 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_values
609 CALL timeset(routinen, handle)
611 CALL get_rtp(rtp=rtp, rho_new=rho_new)
613 DO i = 1,
SIZE(rho_new)
617 DO i = 1,
SIZE(delta_p)
622 block_values = block_values*block_values
628 CALL dbcsr_create(tmp, template=delta_p(1)%matrix, matrix_type=
"N")
629 DO ispin = 1,
SIZE(delta_p)/2
635 DO ispin = 1,
SIZE(delta_p)/2
639 alpha = maxval(block_values)
640 IF (alpha > max_alpha) max_alpha = alpha
645 CALL group%max(max_alpha)
646 delta_eps = sqrt(max_alpha)
648 CALL timestop(handle)
658 SUBROUTINE make_moment(qs_env)
662 CHARACTER(len=*),
PARAMETER :: routinen =
'make_moment'
664 INTEGER :: handle, output_unit
668 CALL timeset(routinen, handle)
670 NULLIFY (dft_control)
674 CALL get_qs_env(qs_env, dft_control=dft_control)
675 IF (dft_control%qs_control%dftb)
THEN
677 ELSE IF (dft_control%qs_control%xtb)
THEN
682 CALL timestop(handle)
684 END SUBROUTINE make_moment
695 REAL(kind=
dp) :: filter_eps
698 CHARACTER(len=*),
PARAMETER :: routinen =
'report_density_occupation'
700 INTEGER :: handle, i, im, ispin, re, unit_nr
701 REAL(kind=
dp) :: eps, occ
705 CALL timeset(routinen, handle)
713 CALL dbcsr_create(tmp(i)%matrix, template=rho(i)%matrix)
716 DO ispin = 1,
SIZE(rho)/2
719 eps = max(filter_eps, 1.0e-11_dp)
720 DO WHILE (eps < 1.1_dp)
723 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
724 ispin,
" eps ", eps,
" real: ", occ
727 eps = max(filter_eps, 1.0e-11_dp)
728 DO WHILE (eps < 1.1_dp)
731 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
732 ispin,
" eps ", eps,
" imag: ", occ
737 CALL timestop(handle)
748 SUBROUTINE write_rt_p_to_restart(rho_new, history)
753 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_rt_p_to_restart'
755 CHARACTER(LEN=default_path_length) :: file_name, project_name
756 INTEGER :: handle, im, ispin, re, unit_nr
757 REAL(kind=
dp) :: cs_pos
760 CALL timeset(routinen, handle)
762 IF (logger%para_env%is_source())
THEN
768 project_name = logger%iter_info%project_name
769 DO ispin = 1,
SIZE(rho_new)/2
773 WRITE (file_name,
'(A,I0,A)') &
774 trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
776 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_RESTART.dm"
779 IF (unit_nr > 0)
THEN
780 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
784 WRITE (file_name,
'(A,I0,A)') &
785 trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
787 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_RESTART.dm"
790 IF (unit_nr > 0)
THEN
791 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
796 CALL timestop(handle)
798 END SUBROUTINE write_rt_p_to_restart
809 SUBROUTINE rt_current(qs_env, P_im, dft_section, spin, nspin)
813 INTEGER :: spin, nspin
815 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_current'
817 CHARACTER(len=1) :: char_spin
818 CHARACTER(len=14) :: ext
819 CHARACTER(len=2) :: sdir
820 INTEGER :: dir, handle, print_unit
821 INTEGER,
DIMENSION(:),
POINTER :: stride(:)
833 CALL timeset(routinen, handle)
836 CALL get_qs_env(qs_env=qs_env, subsys=subsys, pw_env=pw_env)
838 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
850 current_env%gauge = -1
851 current_env%gauge_init = .false.
852 CALL auxbas_pw_pool%create_pw(rs)
853 CALL auxbas_pw_pool%create_pw(gs)
863 CALL calculate_jrho_resp(
zero, tmp,
zero,
zero, dir, dir, rs, gs, qs_env, current_env, retain_rsgrid=.true.)
865 stride =
section_get_ivals(dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT%STRIDE")
869 ELSEIF (dir == 2)
THEN
874 WRITE (char_spin,
"(I1)") spin
876 ext =
"-SPIN-"//char_spin//sdir//
".cube"
879 extension=ext, file_status=
"REPLACE", file_action=
"WRITE", &
880 log_filename=.false., mpi_io=mpi_io)
882 CALL cp_pw_to_cube(rs, print_unit,
"EMD current", particles=particles, stride=stride, &
890 CALL auxbas_pw_pool%give_back_pw(rs)
891 CALL auxbas_pw_pool%give_back_pw(gs)
898 CALL timestop(handle)
900 END SUBROUTINE rt_current
912 SUBROUTINE write_available_results(qs_env, rtp)
916 CHARACTER(len=*),
PARAMETER :: routinen =
'write_available_results'
921 CALL timeset(routinen, handle)
924 IF (rtp%linear_scaling)
THEN
934 CALL timestop(handle)
936 END SUBROUTINE write_available_results
946 SUBROUTINE print_field_applied(qs_env, dft_section)
950 CHARACTER(LEN=3),
DIMENSION(3) :: rlab
951 CHARACTER(LEN=default_path_length) :: filename
952 INTEGER :: i, i_step, output_unit, unit_nr
954 REAL(kind=
dp) :: field(3)
959 NULLIFY (dft_control)
964 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp)
969 "REAL_TIME_PROPAGATION%PRINT%FIELD", extension=
".dat", is_new_file=new_file)
971 IF (output_unit > 0)
THEN
972 rlab = [
CHARACTER(LEN=3) ::
"X",
"Y",
"Z"]
973 IF (unit_nr /= output_unit)
THEN
974 INQUIRE (unit=unit_nr, name=filename)
975 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
976 "FIELD",
"The field applied is written to the file:", &
979 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"FIELD APPLIED [a.u.]"
980 WRITE (unit=output_unit, fmt=
"(T5,3(A,A,E16.8,1X))") &
981 (trim(rlab(i)),
"=", dft_control%rtp_control%field(i), i=1, 3)
985 IF (dft_control%apply_efield_field)
THEN
986 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,3(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z"
987 ELSE IF (dft_control%apply_vector_potential)
THEN
988 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,6(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z", &
989 " Vec. Pot. X",
" Vec. Pot. Y",
" Vec. Pot. Z"
994 IF (dft_control%apply_efield_field)
THEN
995 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
996 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
997 field(1), field(2), field(3)
1001 ELSE IF (dft_control%apply_vector_potential)
THEN
1002 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
1003 dft_control%rtp_control%field(1), dft_control%rtp_control%field(2), dft_control%rtp_control%field(3), &
1004 dft_control%rtp_control%vec_pot(1), dft_control%rtp_control%vec_pot(2), dft_control%rtp_control%vec_pot(3)
1010 "REAL_TIME_PROPAGATION%PRINT%FIELD")
1012 END SUBROUTINE print_field_applied
1021 SUBROUTINE print_rtp_energy_components(qs_env, dft_section)
1025 CHARACTER(LEN=default_path_length) :: filename
1026 INTEGER :: i_step, output_unit, unit_nr
1033 NULLIFY (dft_control, energy, rtp)
1038 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp, energy=energy)
1042 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS", extension=
".ener", &
1043 file_action=
"WRITE", is_new_file=new_file)
1045 IF (output_unit > 0)
THEN
1046 IF (unit_nr /= output_unit)
THEN
1047 INQUIRE (unit=unit_nr, name=filename)
1048 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
1049 "ENERGY_CONSTITUENTS",
"Total Energy constituents written to file:", &
1052 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"ENERGY_CONSTITUENTS"
1058 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,10(6X,A))')
"Step Nr.",
"Time[fs]", &
1059 "Total ener.[a.u.]",
"core[a.u.] ",
" overlap [a.u.]",
"hartree[a.u.]",
" exc. [a.u.] ", &
1060 " hartree 1c[a.u.]",
"exc 1c[a.u.] ",
"exc admm[a.u.]",
"exc 1c admm[a.u.]",
"efield LG"
1063 WRITE (unit=unit_nr, fmt=
"(I10,F20.6,10(F20.9))") &
1065 energy%total, energy%core, energy%core_overlap, energy%hartree, energy%exc, &
1066 energy%hartree_1c, energy%exc1, energy%exc_aux_fit, energy%exc1_aux_fit, energy%efield_core
1071 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS")
1073 END SUBROUTINE print_rtp_energy_components
1087 INTEGER :: info_unit
1088 COMPLEX(kind=dp),
DIMENSION(:, :) :: moments
1089 REAL(kind=
dp),
OPTIONAL :: time
1090 LOGICAL,
OPTIONAL :: imag_opt
1092 CHARACTER(len=14),
DIMENSION(4) :: file_extensions
1093 INTEGER :: i, j, ndir, nspin, print_unit
1094 LOGICAL :: imaginary
1099 nspin =
SIZE(moments, 1)
1100 ndir =
SIZE(moments, 2)
1102 IF (nspin < 1) cpabort(
"Zero spin index size in print moments!")
1103 IF (ndir < 1) cpabort(
"Zero direction index size in print moments!")
1106 IF (
PRESENT(imag_opt)) imaginary = imag_opt
1111 file_extensions(1) =
"_SPIN_A_RE.dat"
1112 file_extensions(2) =
"_SPIN_A_IM.dat"
1113 file_extensions(3) =
"_SPIN_B_RE.dat"
1114 file_extensions(4) =
"_SPIN_B_IM.dat"
1119 IF (print_unit == info_unit .AND. print_unit > 0)
THEN
1121 WRITE (print_unit,
"(A18)", advance=
"no")
" MOMENTS_TRACE_RE|"
1123 IF (print_unit > 0)
THEN
1124 IF (
PRESENT(time))
WRITE (print_unit,
"(E20.8E3)", advance=
"no") time*
femtoseconds
1126 WRITE (print_unit,
"(E20.8E3)", advance=
"no") real(moments(i, j))
1129 WRITE (print_unit,
"(E20.8E3)") real(moments(i, ndir))
1135 IF (print_unit == info_unit .AND. print_unit > 0)
THEN
1137 WRITE (print_unit,
"(A18)", advance=
"no")
" MOMENTS_TRACE_IM|"
1139 IF (print_unit > 0)
THEN
1140 IF (
PRESENT(time))
WRITE (print_unit,
"(E20.8E3)", advance=
"no") time*
femtoseconds
1142 WRITE (print_unit,
"(E20.8E3)", advance=
"no") aimag(moments(i, j))
1145 WRITE (print_unit,
"(E20.8E3)") aimag(moments(i, ndir))
1164 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: moment_matrices, density_matrices
1166 COMPLEX(kind=dp),
DIMENSION(:, :) :: moment
1167 LOGICAL,
OPTIONAL :: imag_opt
1169 INTEGER :: i, k, nspin
1171 REAL(kind=
dp) :: real_moment
1174 IF (
PRESENT(imag_opt)) imag = imag_opt
1175 nspin =
SIZE(density_matrices)/2
1180 density_matrices(2*i - 1)%matrix, moment_matrices(k)%matrix, &
1183 moment(i, k) = cmplx(real_moment, 0.0, kind=
dp)
1186 density_matrices(2*i)%matrix, moment_matrices(k)%matrix, &
1189 moment(i, k) = moment(i, k) + cmplx(0.0, real_moment, kind=
dp)
1208 SUBROUTINE print_ft(rtp_section, moments, times, fields, rtc, info_opt, cell)
1210 COMPLEX(kind=dp),
DIMENSION(:, :, :),
POINTER :: moments
1211 REAL(kind=
dp),
DIMENSION(:),
POINTER :: times
1212 COMPLEX(kind=dp),
DIMENSION(:, :),
POINTER :: fields
1214 INTEGER,
OPTIONAL :: info_opt
1215 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell
1217 CHARACTER(len=11),
DIMENSION(2) :: file_extensions
1218 CHARACTER(len=20),
ALLOCATABLE,
DIMENSION(:) :: headers
1219 CHARACTER(len=21) :: prefix
1220 CHARACTER(len=5) :: prefix_format
1221 COMPLEX(kind=dp),
ALLOCATABLE,
DIMENSION(:) :: omegas_complex, omegas_pade
1222 COMPLEX(kind=dp),
ALLOCATABLE,
DIMENSION(:, :) :: field_results, field_results_pade, &
1223 pol_results, pol_results_pade, &
1224 results, results_pade, value_series
1225 INTEGER :: ft_unit, i, info_unit, k, n, n_elems, &
1227 LOGICAL :: do_moments_ft, do_polarizability
1228 REAL(kind=
dp) :: damping, t0
1229 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: omegas, omegas_pade_real
1230 REAL(kind=
dp),
DIMENSION(3) :: delta_vec
1243 nspin =
SIZE(moments, 1)
1245 n_elems =
SIZE(rtc%print_pol_elements, 1)
1248 IF (
PRESENT(info_opt)) info_unit = info_opt
1251 file_extensions(1) =
"_SPIN_A.dat"
1252 file_extensions(2) =
"_SPIN_B.dat"
1257 do_polarizability = do_polarizability .AND. (n_elems > 0)
1259 damping = rtc%ft_damping
1263 IF (do_polarizability)
THEN
1264 ALLOCATE (field_results(3, n))
1265 IF (rtc%apply_delta_pulse)
THEN
1267 IF (
PRESENT(cell))
THEN
1268 delta_vec(:) = (real(rtc%delta_pulse_direction(1), kind=
dp)*cell%h_inv(1, :) + &
1269 REAL(rtc%delta_pulse_direction(2), kind=
dp)*cell%h_inv(2, :) + &
1270 REAL(rtc%delta_pulse_direction(3), kind=
dp)*cell%h_inv(3, :)) &
1271 *
twopi*rtc%delta_pulse_scale
1273 delta_vec(:) = real(rtc%delta_pulse_direction(:), kind=
dp)*rtc%delta_pulse_scale
1276 field_results(k, :) = cmplx(delta_vec(k), 0.0, kind=
dp)
1280 CALL multi_fft(times, fields, field_results, &
1281 damping_opt=damping, t0_opt=t0, subtract_initial_opt=.true.)
1285 IF (do_moments_ft .OR. do_polarizability)
THEN
1289 ALLOCATE (results(3*nspin, n))
1290 ALLOCATE (omegas(n))
1291 ALLOCATE (value_series(3*nspin, n))
1294 value_series(3*(i - 1) + k, :) = moments(i, k, :)
1298 CALL multi_fft(times, value_series, results, omegas, &
1299 damping_opt=damping, t0_opt=t0, subtract_initial_opt=.true.)
1300 DEALLOCATE (value_series)
1304 file_form=
"FORMATTED", file_position=
"REWIND")
1306 IF (ft_unit > 0)
THEN
1307 ALLOCATE (headers(7))
1308 headers(2) =
" x,real [at.u.]"
1309 headers(3) =
" x,imag [at.u.]"
1310 headers(4) =
" y,real [at.u.]"
1311 headers(5) =
" y,imag [at.u.]"
1312 headers(6) =
" z,real [at.u.]"
1313 headers(7) =
" z,imag [at.u.]"
1314 IF (info_unit == ft_unit)
THEN
1315 headers(1) =
"# Energy [eV]"
1316 prefix =
" MOMENTS_FT|"
1317 prefix_format =
"(A12)"
1318 CALL print_ft_file(ft_unit, headers, omegas, results(3*(i - 1) + 1:3*(i - 1) + 3, :), &
1319 prefix, prefix_format,
evolt)
1321 headers(1) =
"# omega [at.u.]"
1322 CALL print_ft_file(ft_unit, headers, omegas, results(3*(i - 1) + 1:3*(i - 1) + 3, :))
1324 DEALLOCATE (headers)
1330 IF (rtc%pade_requested .AND. (do_moments_ft .OR. do_polarizability))
THEN
1331 ALLOCATE (omegas_complex(
SIZE(omegas)))
1332 omegas_complex(:) = cmplx(omegas(:), 0.0, kind=
dp)
1333 n_pade = int((rtc%pade_e_max - rtc%pade_e_min)/rtc%pade_e_step)
1334 ALLOCATE (omegas_pade(n_pade))
1335 ALLOCATE (omegas_pade_real(n_pade))
1338 omegas_pade_real(i) = (i - 1)*rtc%pade_e_step + rtc%pade_e_min
1339 omegas_pade(i) = cmplx(omegas_pade_real(i), 0.0, kind=
dp)
1341 ALLOCATE (results_pade(nspin*3, n_pade), source=cmplx(0.0, 0.0, kind=
dp))
1344 CALL greenx_refine_ft(rtc%pade_fit_e_min, rtc%pade_fit_e_max, omegas_complex, results(3*(i - 1) + k, :), &
1345 omegas_pade, results_pade(3*(i - 1) + k, :))
1348 ft_unit =
cp_print_key_unit_nr(logger, moment_ft_section, extension=
"_PADE"//file_extensions(i), &
1349 file_form=
"FORMATTED", file_position=
"REWIND")
1350 IF (ft_unit > 0)
THEN
1351 ALLOCATE (headers(7))
1352 headers(2) =
" x,real,pade [at.u.]"
1353 headers(3) =
" x,imag,pade [at.u.]"
1354 headers(4) =
" y,real,pade [at.u.]"
1355 headers(5) =
" y,imag,pade [at.u.]"
1356 headers(6) =
" z,real,pade [at.u.]"
1357 headers(7) =
" z,imag,pade [at.u.]"
1358 IF (info_unit == ft_unit)
THEN
1359 headers(1) =
"# Energy [eV]"
1360 prefix =
" MOMENTS_FT_PADE|"
1361 prefix_format =
"(A17)"
1362 CALL print_ft_file(ft_unit, headers, omegas_pade_real, results_pade(3*(i - 1) + 1:3*(i - 1) + 3, :), &
1363 prefix, prefix_format,
evolt)
1365 headers(1) =
"# omega [at.u.]"
1366 CALL print_ft_file(ft_unit, headers, omegas_pade_real, results_pade(3*(i - 1) + 1:3*(i - 1) + 3, :))
1368 DEALLOCATE (headers)
1373 IF (do_polarizability)
THEN
1375 ALLOCATE (pol_results(n_elems, n))
1379 pol_results(k, :) = results(3*(i - 1) + &
1380 rtc%print_pol_elements(k, 1), :)/ &
1381 (field_results(rtc%print_pol_elements(k, 2), :) + &
1382 1.0e-10*field_results(rtc%print_pol_elements(k, 2), 2))
1386 file_form=
"FORMATTED", file_position=
"REWIND")
1387 IF (ft_unit > 0)
THEN
1388 ALLOCATE (headers(2*n_elems + 1))
1390 WRITE (headers(2*k),
"(A16,I2,I2)")
"real pol. elem.", &
1391 rtc%print_pol_elements(k, 1), &
1392 rtc%print_pol_elements(k, 2)
1393 WRITE (headers(2*k + 1),
"(A16,I2,I2)")
"imag pol. elem.", &
1394 rtc%print_pol_elements(k, 1), &
1395 rtc%print_pol_elements(k, 2)
1398 IF (info_unit == ft_unit)
THEN
1399 headers(1) =
"# Energy [eV]"
1400 prefix =
" POLARIZABILITY|"
1401 prefix_format =
"(A16)"
1402 CALL print_ft_file(ft_unit, headers, omegas, pol_results, &
1403 prefix, prefix_format,
evolt)
1405 headers(1) =
"# omega [at.u.]"
1406 CALL print_ft_file(ft_unit, headers, omegas, pol_results)
1408 DEALLOCATE (headers)
1415 IF (rtc%pade_requested .AND. do_polarizability)
THEN
1417 ALLOCATE (field_results_pade(3, n_pade))
1418 IF (rtc%apply_delta_pulse)
THEN
1420 field_results_pade(k, :) = cmplx(delta_vec(k), 0.0, kind=
dp)
1425 omegas_complex, field_results(k, :), &
1426 omegas_pade, field_results_pade(k, :))
1430 ALLOCATE (pol_results_pade(n_elems, n_pade))
1435 pol_results_pade(k, :) = results_pade(3*(i - 1) + rtc%print_pol_elements(k, 1), :)/( &
1436 field_results_pade(rtc%print_pol_elements(k, 2), :) + &
1437 field_results_pade(rtc%print_pol_elements(k, 2), 2)*1.0e-10_dp)
1441 file_form=
"FORMATTED", file_position=
"REWIND")
1442 IF (ft_unit > 0)
THEN
1443 ALLOCATE (headers(2*n_elems + 1))
1445 WRITE (headers(2*k),
"(A16,I2,I2)")
"re,pade,pol.", &
1446 rtc%print_pol_elements(k, 1), &
1447 rtc%print_pol_elements(k, 2)
1448 WRITE (headers(2*k + 1),
"(A16,I2,I2)")
"im,pade,pol.", &
1449 rtc%print_pol_elements(k, 1), &
1450 rtc%print_pol_elements(k, 2)
1453 IF (info_unit == ft_unit)
THEN
1454 headers(1) =
"# Energy [eV]"
1455 prefix =
" POLARIZABILITY_PADE|"
1456 prefix_format =
"(A21)"
1457 CALL print_ft_file(ft_unit, headers, omegas_pade_real, pol_results_pade, &
1458 prefix, prefix_format,
evolt)
1460 headers(1) =
"# omega [at.u.]"
1461 CALL print_ft_file(ft_unit, headers, omegas_pade_real, pol_results_pade)
1463 DEALLOCATE (headers)
1467 DEALLOCATE (field_results_pade)
1468 DEALLOCATE (pol_results_pade)
1471 IF (rtc%pade_requested .AND. (do_moments_ft .OR. do_polarizability))
THEN
1472 DEALLOCATE (omegas_complex)
1473 DEALLOCATE (omegas_pade)
1474 DEALLOCATE (omegas_pade_real)
1475 DEALLOCATE (results_pade)
1478 IF (do_polarizability)
THEN
1479 DEALLOCATE (pol_results)
1480 DEALLOCATE (field_results)
1483 IF (do_moments_ft .OR. do_polarizability)
THEN
1484 DEALLOCATE (results)
1499 SUBROUTINE print_ft_file(ft_unit, headers, xvals, yvals, prefix, prefix_format, xscale_opt)
1500 INTEGER,
INTENT(IN) :: ft_unit
1501 CHARACTER(len=20),
DIMENSION(:),
INTENT(IN) :: headers
1502 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: xvals
1503 COMPLEX(kind=dp),
DIMENSION(:, :),
INTENT(IN) :: yvals
1504 CHARACTER(len=21),
INTENT(IN),
OPTIONAL :: prefix
1505 CHARACTER(len=5),
INTENT(IN),
OPTIONAL :: prefix_format
1506 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: xscale_opt
1508 INTEGER :: i, j, ncols, nrows
1509 LOGICAL :: do_prefix
1510 REAL(kind=
dp) :: xscale
1513 IF (
PRESENT(prefix))
THEN
1514 IF (
PRESENT(prefix_format))
THEN
1517 cpabort(
"Printing of prefix with missing format!")
1522 IF (
PRESENT(xscale_opt)) xscale = xscale_opt
1524 ncols =
SIZE(yvals, 1)
1525 nrows =
SIZE(yvals, 2)
1528 IF (
SIZE(headers) < 2*ncols + 1)
THEN
1529 cpabort(
"Not enough headers to print the file!")
1532 IF (
SIZE(xvals) < nrows)
THEN
1533 cpabort(
"Not enough xvals to print all yvals!")
1536 IF (ft_unit > 0)
THEN
1540 WRITE (ft_unit, prefix_format, advance=
"no") prefix
1542 WRITE (ft_unit,
"(A20)", advance=
"no") headers(1)
1544 DO j = 1, 2*ncols - 1
1545 WRITE (ft_unit,
"(A20)", advance=
"no") headers(j + 1)
1547 WRITE (ft_unit,
"(A20)") headers(2*ncols + 1)
1551 WRITE (ft_unit, prefix_format, advance=
"no") prefix
1553 WRITE (ft_unit,
"(E20.8E3)", advance=
"no") xvals(i)*xscale
1555 WRITE (ft_unit,
"(E20.8E3,E20.8E3)", advance=
"no") &
1556 REAL(yvals(j, i)), aimag(yvals(j, i))
1558 WRITE (ft_unit,
"(E20.8E3,E20.8E3)") &
1559 REAL(yvals(ncols, i)), aimag(yvals(ncols, i))
1562 END SUBROUTINE print_ft_file
Define the atomic kind types and their sub types.
Handles all functions related to the CELL.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_deallocate_matrix(matrix)
...
subroutine, public dbcsr_iterator_next_block(iterator, row, column, block, block_number_argument_has_been_removed, row_size, col_size, row_offset, col_offset)
...
logical function, public dbcsr_iterator_blocks_left(iterator)
...
subroutine, public dbcsr_iterator_stop(iterator)
...
subroutine, public dbcsr_desymmetrize(matrix_a, matrix_b)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_init_p(matrix)
...
subroutine, public dbcsr_filter(matrix, eps)
...
subroutine, public dbcsr_binary_write(matrix, filepath)
...
real(kind=dp) function, public dbcsr_get_occupation(matrix)
...
subroutine, public dbcsr_iterator_start(iterator, matrix, shared, dynamic, dynamic_byrows)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
real(kind=dp) function, public dbcsr_checksum(matrix, pos)
Calculates the checksum of a DBCSR matrix.
subroutine, public dbcsr_trace(matrix, trace)
Computes the trace of the given matrix, also known as the sum of its diagonal elements.
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
Basic linear algebra operations for full matrices.
subroutine, public cp_fm_scale_and_add(alpha, matrix_a, beta, matrix_b)
calc A <- alpha*A + beta*B optimized for alpha == 1.0 (just add beta*B) and beta == 0....
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_double(fmstruct, struct, context, col, row)
creates a struct with twice the number of blocks on each core. If matrix A has to be multiplied with ...
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_create(matrix, matrix_struct, name, use_sp, nrow, ncol, set_zero)
creates a new full matrix with the given structure
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
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
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...
character(len=default_string_length) function, public cp_iter_string(iter_info, print_key, for_file)
returns the iteration string, a string that is useful to create unique filenames (once you trim it)
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)
...
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
logical function, public cp_printkey_is_on(iteration_info, print_key)
returns true if the printlevel activates this printkey does not look if this iteration it should be p...
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...
A wrapper around pw_to_cube() which accepts particle_list_type.
subroutine, public cp_pw_to_cube(pw, unit_nr, title, particles, zeff, stride, max_file_size_mb, zero_tails, silent, mpi_io)
...
all routins needed for a nonperiodic electric field
subroutine, public make_field(dft_control, field, sim_step, sim_time)
computes the amplitude of the efield within a given envelop
Interface to the Greenx library.
subroutine, public greenx_refine_ft(fit_e_min, fit_e_max, x_fit, y_fit, x_eval, y_eval, n_pade_opt)
Refines the FT grid using Padé approximants.
sums arrays of real/complex numbers with much reduced round-off as compared to a naive implementation...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_path_length
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
Definition of mathematical constants and functions.
real(kind=dp), parameter, public one
real(kind=dp), parameter, public twopi
real(kind=dp), parameter, public zero
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
represent a simple array based list of the given type
Define methods related to particle_type.
subroutine, public get_particle_set(particle_set, qs_kind_set, first_sgf, last_sgf, nsgf, nmao, basis)
Get the components of a particle set.
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public femtoseconds
real(kind=dp), parameter, public evolt
container for various plainwaves related things
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
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, 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, 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, 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.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
given the response wavefunctions obtained by the application of the (rxp), p, and ((dk-dl)xp) operato...
subroutine, public calculate_jrho_resp(mat_d0, mat_jp, mat_jp_rii, mat_jp_riii, ib, idir, current_rs, current_gs, qs_env, current_env, soft_valid, retain_rsgrid)
Calculation of the idir component of the response current density in the presence of a constant magne...
Type definitiona for linear response calculations.
Definition and initialisation of the mo data type.
subroutine, public write_rt_mos_to_restart(mo_array, rt_mos, particle_set, dft_section, qs_kind_set)
...
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.
subroutine, public build_lin_mom_matrix(qs_env, matrix)
Calculation of the linear momentum matrix <mu|∂|nu> over Cartesian Gaussian functions.
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Does all kind of post scf calculations for GPW/GAPW.
subroutine, public write_mo_free_results(qs_env)
Write QS results always available (if switched on through the print_keys) Can be called from ls_scf.
subroutine, public qs_scf_post_moments(input, logger, qs_env, output_unit)
Computes and prints electric moments.
subroutine, public write_mo_dependent_results(qs_env, scf_env)
Write QS results available if MO's are present (if switched on through the print_keys) Writes only MO...
Does all kind of post scf calculations for DFTB.
subroutine, public scf_post_calculation_tb(qs_env, tb_type, no_mos)
collects possible post - scf calculations and prints info / computes properties.
module that contains the definitions of the scf types
types that represent a quickstep subsys
subroutine, public qs_subsys_get(subsys, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, cp_subsys, nelectron_total, nelectron_spin)
...
Function related to MO projection in RTP calculations.
subroutine, public compute_and_write_proj_mo(qs_env, mos_new, proj_mo, n_proj)
Compute the projection of the current MO coefficients on reference ones and write the results.
Separation of Fourier transform utilities into separate file.
subroutine, public multi_fft(time_series, value_series, result_series, omega_series, damping_opt, t0_opt, subtract_initial_opt)
Calculates the Fourier transform - couples to FFT libraries in CP2K, if available.
Routine for the real time propagation output.
subroutine, public print_ft(rtp_section, moments, times, fields, rtc, info_opt, cell)
Calculate and print the Fourier transforms + polarizabilites from moment trace.
subroutine, public report_density_occupation(filter_eps, rho)
Reports the sparsity pattern of the complex density matrix.
subroutine, public rt_prop_output(qs_env, run_type, delta_iter, used_time)
...
subroutine, public rt_convergence(rtp, matrix_s, delta_mos, delta_eps)
computes the convergence criterion for RTP and EMD
subroutine, public print_moments(moments_section, info_unit, moments, time, imag_opt)
Print the dipole moments into a file.
subroutine, public calc_local_moment(moment_matrices, density_matrices, work, moment, imag_opt)
Calculate the values of real/imaginary parts of moments in all directions.
subroutine, public rt_convergence_density(rtp, delta_p, delta_eps)
computes the convergence criterion for RTP and EMD based on the density matrix
Types and set_get for real time propagation depending on runtype and diagonalization method different...
subroutine, public get_rtp(rtp, exp_h_old, exp_h_new, h_last_iter, rho_old, rho_next, rho_new, mos, mos_new, mos_old, mos_next, s_inv, s_half, s_minus_half, b_mat, c_mat, propagator_matrix, mixing, mixing_factor, s_der, dt, nsteps, sinvh, sinvh_imag, sinvb, admm_mos)
...
subroutine, public write_rtp_mos_to_output_unit(qs_env, rtp)
...
subroutine, public write_rtp_mo_cubes(qs_env, rtp)
Write the time dependent amplitude of the MOs in real grid. Very close to qs_scf_post_gpw/qs_scf_post...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
keeps the information about the structure of a full matrix
type of a logger, at the moment it contains just a print level starting at which level it should be l...
represent a list of objects
contained for different pw related things
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Provides all information about a quickstep kind.
keeps the density in various representations, keeping track of which ones are valid.