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_set_all(matrix, alpha, beta)
set all elements of a matrix to the same value, and optionally the diagonal to a different one
subroutine, public cp_fm_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 ...
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, stride, 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.