24 dbcsr_type_antisymmetric, dbcsr_type_no_symmetry
104#include "../base/base_uses.f90"
110 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'rt_propagation_output'
136 INTEGER,
INTENT(in) :: run_type
137 REAL(
dp),
INTENT(in),
OPTIONAL :: delta_iter, used_time
139 INTEGER :: i, n_electrons, n_proj, natom, nspin, &
140 output_unit, spin, unit_nr
141 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: first_sgf, last_sgf
142 INTEGER,
DIMENSION(2) :: nelectron_spin
143 INTEGER,
DIMENSION(:),
POINTER :: row_blk_sizes
145 REAL(
dp) :: orthonormality, strace, tot_rho_r, trace
146 REAL(kind=
dp),
DIMENSION(3) :: field, reference_point
147 REAL(kind=
dp),
DIMENSION(:),
POINTER :: qs_tot_rho_r
148 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: j_int
150 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
153 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, p_im, p_xyz, rho_new
157 POINTER :: sab_all, sab_orb
159 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
164 NULLIFY (logger, dft_control)
172 particle_set=particle_set, &
173 atomic_kind_set=atomic_kind_set, &
174 qs_kind_set=qs_kind_set, &
175 dft_control=dft_control, sab_all=sab_all, sab_orb=sab_orb, &
176 dbcsr_dist=dbcsr_dist, nelectron_spin=nelectron_spin)
181 n_electrons = n_electrons - dft_control%charge
183 CALL qs_rho_get(rho_struct=rho, tot_rho_r=qs_tot_rho_r)
190 IF (output_unit > 0)
THEN
191 WRITE (output_unit, fmt=
"(/,(T3,A,T40,I5))") &
192 "Information at iteration step:", rtp%iter
193 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
194 "Total electronic density (r-space): ", &
197 REAL(n_electrons,
dp)
198 WRITE (unit=output_unit, fmt=
"((T3,A,T59,F22.14))") &
199 "Total energy:", rtp%energy_new
201 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
202 "Energy difference to previous iteration step:", rtp%energy_new - rtp%energy_old
204 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
205 "Energy difference to initial state:", rtp%energy_new - rtp%energy_old
206 IF (
PRESENT(delta_iter)) &
207 WRITE (unit=output_unit, fmt=
"((T3,A,T61,E20.6))") &
208 "Convergence:", delta_iter
209 IF (rtp%converged)
THEN
211 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F12.2))") &
212 "Time needed for propagation:", used_time
213 WRITE (unit=output_unit, fmt=
"(/,(T3,A,3X,F16.14))") &
214 "CONVERGENCE REACHED", rtp%energy_new - rtp%energy_old
218 IF (rtp%converged)
THEN
219 IF (.NOT. rtp%linear_scaling)
THEN
220 CALL get_rtp(rtp=rtp, mos_new=mos_new)
221 CALL rt_calculate_orthonormality(orthonormality, &
222 mos_new, matrix_s(1)%matrix)
223 IF (output_unit > 0) &
224 WRITE (output_unit, fmt=
"(/,(T3,A,T60,F20.10))") &
225 "Max deviation from orthonormalization:", orthonormality
229 IF (output_unit > 0) &
232 "PRINT%PROGRAM_RUN_INFO")
234 IF (rtp%converged)
THEN
237 dft_section,
"REAL_TIME_PROPAGATION%PRINT%FIELD"),
cp_p_file)) &
238 CALL print_field_applied(qs_env, dft_section)
239 CALL make_moment(qs_env)
241 dft_section,
"REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS"),
cp_p_file))
THEN
242 CALL print_rtp_energy_components(qs_env, dft_section)
244 IF (.NOT. dft_control%qs_control%dftb)
THEN
245 CALL write_available_results(qs_env=qs_env, rtp=rtp)
248 IF (rtp%linear_scaling)
THEN
249 CALL get_rtp(rtp=rtp, rho_new=rho_new)
252 IF (dft_control%rtp_control%save_local_moments)
THEN
254 IF (dft_control%apply_efield_field)
THEN
255 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
256 rtp%fields(:, rtp%istep + rtp%i_start + 1) = cmplx(field(:), 0.0, kind=
dp)
258 IF (.NOT. dft_control%rtp_control%fixed_ions)
THEN
265 rtp%local_moments_work, rtp%moments(:, :, rtp%istep + rtp%i_start + 1))
267 rtp%times(rtp%istep + rtp%i_start + 1) = qs_env%sim_time
270 rtp%moments(:, :, rtp%istep + rtp%i_start + 1), qs_env%sim_time, rtp%track_imag_density)
274 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART"),
cp_p_file))
THEN
275 CALL write_rt_p_to_restart(rho_new, .false.)
278 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART_HISTORY"),
cp_p_file))
THEN
279 CALL write_rt_p_to_restart(rho_new, .true.)
281 IF (.NOT. dft_control%qs_control%dftb)
THEN
284 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
285 DO spin = 1,
SIZE(rho_new)/2
286 CALL rt_current(qs_env, rho_new(2*spin)%matrix, dft_section, spin,
SIZE(rho_new)/2)
291 CALL get_rtp(rtp=rtp, mos_new=mos_new)
292 IF (.NOT. dft_control%qs_control%dftb .AND. .NOT. dft_control%qs_control%xtb)
THEN
293 IF (rtp%track_imag_density)
THEN
294 NULLIFY (p_im, p_xyz)
299 natom =
SIZE(particle_set, 1)
300 ALLOCATE (first_sgf(natom))
301 ALLOCATE (last_sgf(natom))
303 first_sgf=first_sgf, &
305 ALLOCATE (row_blk_sizes(natom))
306 CALL dbcsr_convert_offsets_to_sizes(first_sgf, row_blk_sizes, last_sgf)
307 DEALLOCATE (first_sgf)
308 DEALLOCATE (last_sgf)
310 ALLOCATE (p_xyz(1)%matrix)
313 dist=dbcsr_dist, matrix_type=dbcsr_type_antisymmetric, &
314 row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes, &
319 ALLOCATE (p_xyz(i)%matrix)
324 DEALLOCATE (row_blk_sizes)
326 nspin =
SIZE(mos_new)/2
328 ALLOCATE (j_int(nspin, 3))
333 CALL dbcsr_create(tmp_ao, template=matrix_s(1)%matrix, matrix_type=dbcsr_type_no_symmetry, name=
"tmp")
341 CALL dbcsr_multiply(
"T",
"N", 1.0_dp, p_im(spin)%matrix, p_xyz(i)%matrix, &
344 strace = strace + trace
346 j_int(spin, i) = -trace + dft_control%rtp_control%vec_pot(i)*nelectron_spin(spin)
353 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT_INT"),
cp_p_file))
THEN
357 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT", extension=
".dat", is_new_file=new_file)
359 IF (output_unit > 0)
THEN
362 WRITE (unit=unit_nr, fmt=
'("#",5X,A,4X,A,2X,A,2(10X,A),4X,A,2(10X,A))') &
363 "Step Nr.",
"Time[fs]",
"ALPHA jint[X]",
"jint[Y]",
"jint[Z]", &
364 "BETA jint[X]",
"jint[Y]",
"jint[Z]"
366 WRITE (unit=unit_nr, fmt=
'("#",5X,A,4X,A,8X,A,2(10X,A))')
"Step Nr.",
"Time[fs]", &
367 "jint[X]",
"jint[Y]",
"jint[Z]"
372 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
373 j_int(1, 1:3), j_int(2, 1:3)
375 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
380 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT")
385 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
387 CALL rt_current(qs_env, p_im(spin)%matrix, dft_section, spin, nspin)
395 IF (dft_control%rtp_control%is_proj_mo)
THEN
396 DO n_proj = 1,
SIZE(dft_control%rtp_control%proj_mo_list)
398 dft_control%rtp_control%proj_mo_list(n_proj)%proj_mo, n_proj)
403 dft_section, qs_kind_set)
407 rtp%energy_old = rtp%energy_new
409 IF (.NOT. rtp%converged .AND. rtp%iter >= dft_control%rtp_control%max_iter) &
410 CALL cp_abort(__location__,
"EMD did not converge, either increase MAX_ITER "// &
411 "or use a smaller TIMESTEP")
423 SUBROUTINE rt_calculate_orthonormality(orthonormality, mos_new, matrix_s)
424 REAL(kind=
dp),
INTENT(out) :: orthonormality
425 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
426 TYPE(
dbcsr_type),
OPTIONAL,
POINTER :: matrix_s
428 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_calculate_orthonormality'
430 INTEGER :: handle, i, im, ispin, j, k, n, &
431 ncol_local, nrow_local, nspin, re
432 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
433 REAL(kind=
dp) :: alpha, max_alpha, max_beta
435 TYPE(
cp_fm_type) :: overlap_re, svec_im, svec_re
437 NULLIFY (tmp_fm_struct)
439 CALL timeset(routinen, handle)
441 nspin =
SIZE(mos_new)/2
451 nrow_global=n, ncol_global=k)
459 para_env=mos_new(re)%matrix_struct%para_env, &
460 context=mos_new(re)%matrix_struct%context)
466 svec_re, 0.0_dp, overlap_re)
468 svec_im, 1.0_dp, overlap_re)
473 CALL cp_fm_get_info(overlap_re, nrow_local=nrow_local, ncol_local=ncol_local, &
474 row_indices=row_indices, col_indices=col_indices)
477 alpha = overlap_re%local_data(i, j)
478 IF (row_indices(i) == col_indices(j)) alpha = alpha - 1.0_dp
479 max_alpha = max(max_alpha, abs(alpha))
484 CALL mos_new(1)%matrix_struct%para_env%max(max_alpha)
485 CALL mos_new(1)%matrix_struct%para_env%max(max_beta)
486 orthonormality = max_alpha
488 CALL timestop(handle)
490 END SUBROUTINE rt_calculate_orthonormality
504 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: delta_mos
505 REAL(
dp),
INTENT(out) :: delta_eps
507 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence'
508 REAL(kind=
dp),
PARAMETER ::
one = 1.0_dp,
zero = 0.0_dp
510 INTEGER :: handle, i, icol, im, ispin, j, lcol, &
511 lrow, nao, newdim, nmo, nspin, re
512 LOGICAL :: double_col, double_row
513 REAL(kind=
dp) :: alpha, max_alpha
516 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
518 NULLIFY (tmp_fm_struct)
520 CALL timeset(routinen, handle)
522 CALL get_rtp(rtp=rtp, mos_new=mos_new)
524 nspin =
SIZE(delta_mos)/2
527 DO i = 1,
SIZE(mos_new)
538 delta_mos(re)%matrix_struct, &
539 delta_mos(re)%matrix_struct%context, &
546 CALL cp_fm_get_info(delta_mos(re), ncol_local=lcol, ncol_global=nmo, &
553 work%local_data(:, icol) = delta_mos(re)%local_data(:, icol)
554 work%local_data(:, icol + lcol) = delta_mos(im)%local_data(:, icol)
562 para_env=delta_mos(re)%matrix_struct%para_env, &
563 context=delta_mos(re)%matrix_struct%context)
566 delta_mos(re)%matrix_struct%context, &
582 alpha = sqrt((work%local_data(i, j) + work2%local_data(i, j + lcol))**2 + &
583 (work%local_data(i, j + lcol) - work2%local_data(i, j))**2)
584 max_alpha = max(max_alpha, abs(alpha))
597 CALL delta_mos(1)%matrix_struct%para_env%max(max_alpha)
598 delta_eps = sqrt(max_alpha)
600 CALL timestop(handle)
616 REAL(
dp),
INTENT(out) :: delta_eps
618 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence_density'
619 REAL(kind=
dp),
PARAMETER ::
one = 1.0_dp,
zero = 0.0_dp
621 INTEGER :: col_atom, handle, i, ispin, row_atom
622 REAL(
dp) :: alpha, max_alpha
623 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_values
629 CALL timeset(routinen, handle)
631 CALL get_rtp(rtp=rtp, rho_new=rho_new)
633 DO i = 1,
SIZE(rho_new)
637 DO i = 1,
SIZE(delta_p)
642 block_values = block_values*block_values
648 CALL dbcsr_create(tmp, template=delta_p(1)%matrix, matrix_type=
"N")
649 DO ispin = 1,
SIZE(delta_p)/2
655 DO ispin = 1,
SIZE(delta_p)/2
659 alpha = maxval(block_values)
660 IF (alpha > max_alpha) max_alpha = alpha
665 CALL group%max(max_alpha)
666 delta_eps = sqrt(max_alpha)
668 CALL timestop(handle)
678 SUBROUTINE make_moment(qs_env)
682 CHARACTER(len=*),
PARAMETER :: routinen =
'make_moment'
684 INTEGER :: handle, output_unit
688 CALL timeset(routinen, handle)
690 NULLIFY (dft_control)
694 CALL get_qs_env(qs_env, dft_control=dft_control)
695 IF (dft_control%qs_control%dftb)
THEN
697 ELSE IF (dft_control%qs_control%xtb)
THEN
702 CALL timestop(handle)
704 END SUBROUTINE make_moment
715 REAL(kind=
dp) :: filter_eps
718 CHARACTER(len=*),
PARAMETER :: routinen =
'report_density_occupation'
720 INTEGER :: handle, i, im, ispin, re, unit_nr
721 REAL(kind=
dp) :: eps, occ
725 CALL timeset(routinen, handle)
733 CALL dbcsr_create(tmp(i)%matrix, template=rho(i)%matrix)
736 DO ispin = 1,
SIZE(rho)/2
739 eps = max(filter_eps, 1.0e-11_dp)
740 DO WHILE (eps < 1.1_dp)
743 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
744 ispin,
" eps ", eps,
" real: ", occ
747 eps = max(filter_eps, 1.0e-11_dp)
748 DO WHILE (eps < 1.1_dp)
751 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
752 ispin,
" eps ", eps,
" imag: ", occ
757 CALL timestop(handle)
768 SUBROUTINE write_rt_p_to_restart(rho_new, history)
773 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_rt_p_to_restart'
775 CHARACTER(LEN=default_path_length) :: file_name, project_name
776 INTEGER :: handle, im, ispin, re, unit_nr
777 REAL(kind=
dp) :: cs_pos
780 CALL timeset(routinen, handle)
782 IF (logger%para_env%is_source())
THEN
788 project_name = logger%iter_info%project_name
789 DO ispin = 1,
SIZE(rho_new)/2
793 WRITE (file_name,
'(A,I0,A)') &
794 trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
796 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_RESTART.dm"
799 IF (unit_nr > 0)
THEN
800 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
804 WRITE (file_name,
'(A,I0,A)') &
805 trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
807 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_RESTART.dm"
810 IF (unit_nr > 0)
THEN
811 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
816 CALL timestop(handle)
818 END SUBROUTINE write_rt_p_to_restart
829 SUBROUTINE rt_current(qs_env, P_im, dft_section, spin, nspin)
833 INTEGER :: spin, nspin
835 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_current'
837 CHARACTER(len=1) :: char_spin
838 CHARACTER(len=14) :: ext
839 CHARACTER(len=2) :: sdir
840 INTEGER :: dir, handle, print_unit
841 INTEGER,
DIMENSION(:),
POINTER :: stride(:)
853 CALL timeset(routinen, handle)
856 CALL get_qs_env(qs_env=qs_env, subsys=subsys, pw_env=pw_env)
858 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
870 current_env%gauge = -1
871 current_env%gauge_init = .false.
872 CALL auxbas_pw_pool%create_pw(rs)
873 CALL auxbas_pw_pool%create_pw(gs)
883 CALL calculate_jrho_resp(
zero, tmp,
zero,
zero, dir, dir, rs, gs, qs_env, current_env, retain_rsgrid=.true.)
885 stride =
section_get_ivals(dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT%STRIDE")
889 ELSEIF (dir == 2)
THEN
894 WRITE (char_spin,
"(I1)") spin
896 ext =
"-SPIN-"//char_spin//sdir//
".cube"
899 extension=ext, file_status=
"REPLACE", file_action=
"WRITE", &
900 log_filename=.false., mpi_io=mpi_io)
902 CALL cp_pw_to_cube(rs, print_unit,
"EMD current", particles=particles, stride=stride, &
910 CALL auxbas_pw_pool%give_back_pw(rs)
911 CALL auxbas_pw_pool%give_back_pw(gs)
918 CALL timestop(handle)
920 END SUBROUTINE rt_current
932 SUBROUTINE write_available_results(qs_env, rtp)
936 CHARACTER(len=*),
PARAMETER :: routinen =
'write_available_results'
941 CALL timeset(routinen, handle)
944 IF (rtp%linear_scaling)
THEN
954 CALL timestop(handle)
956 END SUBROUTINE write_available_results
966 SUBROUTINE print_field_applied(qs_env, dft_section)
970 CHARACTER(LEN=3),
DIMENSION(3) :: rlab
971 CHARACTER(LEN=default_path_length) :: filename
972 INTEGER :: i, i_step, output_unit, unit_nr
974 REAL(kind=
dp) :: field(3)
979 NULLIFY (dft_control)
984 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp)
989 "REAL_TIME_PROPAGATION%PRINT%FIELD", extension=
".dat", is_new_file=new_file)
991 IF (output_unit > 0)
THEN
992 rlab = [
CHARACTER(LEN=3) ::
"X",
"Y",
"Z"]
993 IF (unit_nr /= output_unit)
THEN
994 INQUIRE (unit=unit_nr, name=filename)
995 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
996 "FIELD",
"The field applied is written to the file:", &
999 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"FIELD APPLIED [a.u.]"
1000 WRITE (unit=output_unit, fmt=
"(T5,3(A,A,E16.8,1X))") &
1001 (trim(rlab(i)),
"=", dft_control%rtp_control%field(i), i=1, 3)
1005 IF (dft_control%apply_efield_field)
THEN
1006 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,3(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z"
1007 ELSE IF (dft_control%apply_vector_potential)
THEN
1008 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,6(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z", &
1009 " Vec. Pot. X",
" Vec. Pot. Y",
" Vec. Pot. Z"
1014 IF (dft_control%apply_efield_field)
THEN
1015 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
1016 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
1017 field(1), field(2), field(3)
1021 ELSE IF (dft_control%apply_vector_potential)
THEN
1022 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
1023 dft_control%rtp_control%field(1), dft_control%rtp_control%field(2), dft_control%rtp_control%field(3), &
1024 dft_control%rtp_control%vec_pot(1), dft_control%rtp_control%vec_pot(2), dft_control%rtp_control%vec_pot(3)
1030 "REAL_TIME_PROPAGATION%PRINT%FIELD")
1032 END SUBROUTINE print_field_applied
1041 SUBROUTINE print_rtp_energy_components(qs_env, dft_section)
1045 CHARACTER(LEN=default_path_length) :: filename
1046 INTEGER :: i_step, output_unit, unit_nr
1053 NULLIFY (dft_control, energy, rtp)
1058 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp, energy=energy)
1062 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS", extension=
".ener", &
1063 file_action=
"WRITE", is_new_file=new_file)
1065 IF (output_unit > 0)
THEN
1066 IF (unit_nr /= output_unit)
THEN
1067 INQUIRE (unit=unit_nr, name=filename)
1068 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
1069 "ENERGY_CONSTITUENTS",
"Total Energy constituents written to file:", &
1072 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"ENERGY_CONSTITUENTS"
1078 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,10(6X,A))')
"Step Nr.",
"Time[fs]", &
1079 "Total ener.[a.u.]",
"core[a.u.] ",
" overlap [a.u.]",
"hartree[a.u.]",
" exc. [a.u.] ", &
1080 " hartree 1c[a.u.]",
"exc 1c[a.u.] ",
"exc admm[a.u.]",
"exc 1c admm[a.u.]",
"efield LG"
1083 WRITE (unit=unit_nr, fmt=
"(I10,F20.6,10(F20.9))") &
1085 energy%total, energy%core, energy%core_overlap, energy%hartree, energy%exc, &
1086 energy%hartree_1c, energy%exc1, energy%exc_aux_fit, energy%exc1_aux_fit, energy%efield_core
1091 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS")
1093 END SUBROUTINE print_rtp_energy_components
1106 SUBROUTINE print_moments(moments_section, info_unit, moments, time, imag_opt, append_opt)
1108 INTEGER :: info_unit
1109 COMPLEX(kind=dp),
DIMENSION(:, :) :: moments
1110 REAL(kind=
dp),
OPTIONAL :: time
1111 LOGICAL,
OPTIONAL :: imag_opt, append_opt
1113 CHARACTER(len=14),
DIMENSION(4) :: file_extensions
1114 CHARACTER(len=21) :: prefix
1115 COMPLEX(kind=dp),
DIMENSION(3, 1) :: moment_t
1116 INTEGER :: i, ndir, nspin, print_unit
1117 LOGICAL :: append, imaginary
1122 nspin =
SIZE(moments, 1)
1123 ndir =
SIZE(moments, 2)
1125 IF (nspin < 1) cpabort(
"Zero spin index size in print moments!")
1126 IF (ndir < 1) cpabort(
"Zero direction index size in print moments!")
1129 IF (
PRESENT(imag_opt)) imaginary = imag_opt
1132 IF (
PRESENT(append_opt)) append = append_opt
1137 file_extensions(1) =
"_SPIN_A_RE.dat"
1138 file_extensions(2) =
"_SPIN_A_IM.dat"
1139 file_extensions(3) =
"_SPIN_B_RE.dat"
1140 file_extensions(4) =
"_SPIN_B_IM.dat"
1143 moment_t(:, 1) = moments(i, :)
1146 IF (print_unit == info_unit)
THEN
1148 prefix =
" MOMENTS_TRACE_RE|"
1151 CALL print_rt_file(print_unit, xvals=[time], yvals=moment_t, &
1152 prefix=prefix, prefix_format=
"(A18)", &
1157 headers=[
"# Time [fs]",
" re(mom_t) x [at.u.]", &
1158 " re(mom_t) y [at.u.]",
" re(mom_t) z [at.u.]"], &
1159 xvals=[time], yvals=moment_t, &
1160 prefix=prefix, prefix_format=
"(A18)", &
1167 CALL print_rt_file(print_unit, xvals=[time], yvals=moment_t, &
1172 headers=[
"# Time [fs]",
" re(mom_t) x [at.u.]", &
1173 " re(mom_t) y [at.u.]",
" re(mom_t) z [at.u.]"], &
1174 xvals=[time], yvals=moment_t, &
1182 IF (print_unit == info_unit)
THEN
1184 prefix =
" MOMENTS_TRACE_IM|"
1187 CALL print_rt_file(print_unit, xvals=[time], yvals=moment_t, &
1188 prefix=prefix, prefix_format=
"(A18)", &
1193 headers=[
"# Time [fs]",
" im(mom_t) x [at.u.]", &
1194 " im(mom_t) y [at.u.]",
" im(mom_t) z [at.u.]"], &
1195 xvals=[time], yvals=moment_t, &
1196 prefix=prefix, prefix_format=
"(A18)", &
1203 CALL print_rt_file(print_unit, xvals=[time], yvals=moment_t, &
1208 headers=[
"# Time [fs]",
" im(mom_t) x [at.u.]", &
1209 " im(mom_t) y [at.u.]",
" im(mom_t) z [at.u.]"], &
1210 xvals=[time], yvals=moment_t, &
1231 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: moment_matrices, density_matrices
1233 COMPLEX(kind=dp),
DIMENSION(:, :) :: moment
1234 LOGICAL,
OPTIONAL :: imag_opt
1236 INTEGER :: i, k, nspin
1238 REAL(kind=
dp) :: real_moment
1241 IF (
PRESENT(imag_opt)) imag = imag_opt
1242 nspin =
SIZE(density_matrices)/2
1247 density_matrices(2*i - 1)%matrix, moment_matrices(k)%matrix, &
1250 moment(i, k) = cmplx(real_moment, 0.0, kind=
dp)
1253 density_matrices(2*i)%matrix, moment_matrices(k)%matrix, &
1256 moment(i, k) = moment(i, k) + cmplx(0.0, real_moment, kind=
dp)
1275 SUBROUTINE print_ft(rtp_section, moments, times, fields, rtc, info_opt, cell)
1277 COMPLEX(kind=dp),
DIMENSION(:, :, :),
POINTER :: moments
1278 REAL(kind=
dp),
DIMENSION(:),
POINTER :: times
1279 COMPLEX(kind=dp),
DIMENSION(:, :),
POINTER :: fields
1281 INTEGER,
OPTIONAL :: info_opt
1282 TYPE(
cell_type),
OPTIONAL,
POINTER :: cell
1284 CHARACTER(len=11),
DIMENSION(2) :: file_extensions
1285 CHARACTER(len=20),
ALLOCATABLE,
DIMENSION(:) :: headers
1286 CHARACTER(len=21) :: prefix
1287 CHARACTER(len=5) :: prefix_format
1288 COMPLEX(kind=dp),
ALLOCATABLE,
DIMENSION(:) :: omegas_complex, omegas_pade
1289 COMPLEX(kind=dp),
ALLOCATABLE,
DIMENSION(:, :) :: field_results, field_results_pade, &
1290 pol_results, pol_results_pade, &
1291 results, results_pade, value_series
1292 INTEGER :: ft_unit, i, info_unit, k, n, n_elems, &
1294 LOGICAL :: do_moments_ft, do_polarizability
1295 REAL(kind=
dp) :: damping, t0
1296 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: omegas, omegas_pade_real
1297 REAL(kind=
dp),
DIMENSION(3) :: delta_vec
1310 nspin =
SIZE(moments, 1)
1312 n_elems =
SIZE(rtc%print_pol_elements, 1)
1315 IF (
PRESENT(info_opt)) info_unit = info_opt
1318 file_extensions(1) =
"_SPIN_A.dat"
1319 file_extensions(2) =
"_SPIN_B.dat"
1324 do_polarizability = do_polarizability .AND. (n_elems > 0)
1326 damping = rtc%ft_damping
1330 IF (do_polarizability)
THEN
1331 ALLOCATE (field_results(3, n))
1332 IF (rtc%apply_delta_pulse)
THEN
1334 IF (
PRESENT(cell))
THEN
1335 delta_vec(:) = (real(rtc%delta_pulse_direction(1), kind=
dp)*cell%h_inv(1, :) + &
1336 REAL(rtc%delta_pulse_direction(2), kind=
dp)*cell%h_inv(2, :) + &
1337 REAL(rtc%delta_pulse_direction(3), kind=
dp)*cell%h_inv(3, :)) &
1338 *
twopi*rtc%delta_pulse_scale
1340 delta_vec(:) = real(rtc%delta_pulse_direction(:), kind=
dp)*rtc%delta_pulse_scale
1343 field_results(k, :) = cmplx(delta_vec(k), 0.0, kind=
dp)
1347 CALL multi_fft(times, fields, field_results, &
1348 damping_opt=damping, t0_opt=t0, subtract_initial_opt=.true.)
1352 IF (do_moments_ft .OR. do_polarizability)
THEN
1356 ALLOCATE (results(3*nspin, n))
1357 ALLOCATE (omegas(n))
1358 ALLOCATE (value_series(3*nspin, n))
1361 value_series(3*(i - 1) + k, :) = moments(i, k, :)
1365 CALL multi_fft(times, value_series, results, omegas, &
1366 damping_opt=damping, t0_opt=t0, subtract_initial_opt=.true.)
1367 DEALLOCATE (value_series)
1371 file_form=
"FORMATTED", file_position=
"REWIND")
1373 IF (ft_unit > 0)
THEN
1374 ALLOCATE (headers(7))
1375 headers(2) =
" x,real [at.u.]"
1376 headers(3) =
" x,imag [at.u.]"
1377 headers(4) =
" y,real [at.u.]"
1378 headers(5) =
" y,imag [at.u.]"
1379 headers(6) =
" z,real [at.u.]"
1380 headers(7) =
" z,imag [at.u.]"
1381 IF (info_unit == ft_unit)
THEN
1382 headers(1) =
"# Energy [eV]"
1383 prefix =
" MOMENTS_FT|"
1384 prefix_format =
"(A12)"
1385 CALL print_rt_file(ft_unit, headers, omegas, results(3*(i - 1) + 1:3*(i - 1) + 3, :), &
1386 prefix, prefix_format,
evolt)
1388 headers(1) =
"# omega [at.u.]"
1389 CALL print_rt_file(ft_unit, headers, omegas, results(3*(i - 1) + 1:3*(i - 1) + 3, :))
1391 DEALLOCATE (headers)
1397 IF (rtc%pade_requested .AND. (do_moments_ft .OR. do_polarizability))
THEN
1398 ALLOCATE (omegas_complex(
SIZE(omegas)))
1399 omegas_complex(:) = cmplx(omegas(:), 0.0, kind=
dp)
1400 n_pade = int((rtc%pade_e_max - rtc%pade_e_min)/rtc%pade_e_step)
1401 ALLOCATE (omegas_pade(n_pade))
1402 ALLOCATE (omegas_pade_real(n_pade))
1405 omegas_pade_real(i) = (i - 1)*rtc%pade_e_step + rtc%pade_e_min
1406 omegas_pade(i) = cmplx(omegas_pade_real(i), 0.0, kind=
dp)
1408 ALLOCATE (results_pade(nspin*3, n_pade), source=cmplx(0.0, 0.0, kind=
dp))
1411 CALL greenx_refine_ft(rtc%pade_fit_e_min, rtc%pade_fit_e_max, omegas_complex, results(3*(i - 1) + k, :), &
1412 omegas_pade, results_pade(3*(i - 1) + k, :))
1415 ft_unit =
cp_print_key_unit_nr(logger, moment_ft_section, extension=
"_PADE"//file_extensions(i), &
1416 file_form=
"FORMATTED", file_position=
"REWIND")
1417 IF (ft_unit > 0)
THEN
1418 ALLOCATE (headers(7))
1419 headers(2) =
" x,real,pade [at.u.]"
1420 headers(3) =
" x,imag,pade [at.u.]"
1421 headers(4) =
" y,real,pade [at.u.]"
1422 headers(5) =
" y,imag,pade [at.u.]"
1423 headers(6) =
" z,real,pade [at.u.]"
1424 headers(7) =
" z,imag,pade [at.u.]"
1425 IF (info_unit == ft_unit)
THEN
1426 headers(1) =
"# Energy [eV]"
1427 prefix =
" MOMENTS_FT_PADE|"
1428 prefix_format =
"(A17)"
1429 CALL print_rt_file(ft_unit, headers, omegas_pade_real, results_pade(3*(i - 1) + 1:3*(i - 1) + 3, :), &
1430 prefix, prefix_format,
evolt)
1432 headers(1) =
"# omega [at.u.]"
1433 CALL print_rt_file(ft_unit, headers, omegas_pade_real, results_pade(3*(i - 1) + 1:3*(i - 1) + 3, :))
1435 DEALLOCATE (headers)
1440 IF (do_polarizability)
THEN
1442 ALLOCATE (pol_results(n_elems, n))
1446 pol_results(k, :) = results(3*(i - 1) + &
1447 rtc%print_pol_elements(k, 1), :)/ &
1448 (field_results(rtc%print_pol_elements(k, 2), :) + &
1449 1.0e-10*field_results(rtc%print_pol_elements(k, 2), 2))
1453 file_form=
"FORMATTED", file_position=
"REWIND")
1454 IF (ft_unit > 0)
THEN
1455 ALLOCATE (headers(2*n_elems + 1))
1457 WRITE (headers(2*k),
"(A16,I2,I2)")
"real pol. elem.", &
1458 rtc%print_pol_elements(k, 1), &
1459 rtc%print_pol_elements(k, 2)
1460 WRITE (headers(2*k + 1),
"(A16,I2,I2)")
"imag pol. elem.", &
1461 rtc%print_pol_elements(k, 1), &
1462 rtc%print_pol_elements(k, 2)
1465 IF (info_unit == ft_unit)
THEN
1466 headers(1) =
"# Energy [eV]"
1467 prefix =
" POLARIZABILITY|"
1468 prefix_format =
"(A16)"
1470 prefix, prefix_format,
evolt)
1472 headers(1) =
"# omega [at.u.]"
1475 DEALLOCATE (headers)
1482 IF (rtc%pade_requested .AND. do_polarizability)
THEN
1484 ALLOCATE (field_results_pade(3, n_pade))
1485 IF (rtc%apply_delta_pulse)
THEN
1487 field_results_pade(k, :) = cmplx(delta_vec(k), 0.0, kind=
dp)
1492 omegas_complex, field_results(k, :), &
1493 omegas_pade, field_results_pade(k, :))
1497 ALLOCATE (pol_results_pade(n_elems, n_pade))
1502 pol_results_pade(k, :) = results_pade(3*(i - 1) + rtc%print_pol_elements(k, 1), :)/( &
1503 field_results_pade(rtc%print_pol_elements(k, 2), :) + &
1504 field_results_pade(rtc%print_pol_elements(k, 2), 2)*1.0e-10_dp)
1508 file_form=
"FORMATTED", file_position=
"REWIND")
1509 IF (ft_unit > 0)
THEN
1510 ALLOCATE (headers(2*n_elems + 1))
1512 WRITE (headers(2*k),
"(A16,I2,I2)")
"re,pade,pol.", &
1513 rtc%print_pol_elements(k, 1), &
1514 rtc%print_pol_elements(k, 2)
1515 WRITE (headers(2*k + 1),
"(A16,I2,I2)")
"im,pade,pol.", &
1516 rtc%print_pol_elements(k, 1), &
1517 rtc%print_pol_elements(k, 2)
1520 IF (info_unit == ft_unit)
THEN
1521 headers(1) =
"# Energy [eV]"
1522 prefix =
" POLARIZABILITY_PADE|"
1523 prefix_format =
"(A21)"
1524 CALL print_rt_file(ft_unit, headers, omegas_pade_real, pol_results_pade, &
1525 prefix, prefix_format,
evolt)
1527 headers(1) =
"# omega [at.u.]"
1528 CALL print_rt_file(ft_unit, headers, omegas_pade_real, pol_results_pade)
1530 DEALLOCATE (headers)
1534 DEALLOCATE (field_results_pade)
1535 DEALLOCATE (pol_results_pade)
1538 IF (rtc%pade_requested .AND. (do_moments_ft .OR. do_polarizability))
THEN
1539 DEALLOCATE (omegas_complex)
1540 DEALLOCATE (omegas_pade)
1541 DEALLOCATE (omegas_pade_real)
1542 DEALLOCATE (results_pade)
1545 IF (do_polarizability)
THEN
1546 DEALLOCATE (pol_results)
1547 DEALLOCATE (field_results)
1550 IF (do_moments_ft .OR. do_polarizability)
THEN
1551 DEALLOCATE (results)
1567 SUBROUTINE print_rt_file(rt_unit, headers, xvals, yvals, prefix, prefix_format, xscale_opt, comp_opt)
1568 INTEGER,
INTENT(IN) :: rt_unit
1569 CHARACTER(len=20),
DIMENSION(:),
INTENT(IN), &
1571 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: xvals
1572 COMPLEX(kind=dp),
DIMENSION(:, :),
INTENT(IN) :: yvals
1573 CHARACTER(len=21),
INTENT(IN),
OPTIONAL :: prefix
1574 CHARACTER(len=5),
INTENT(IN),
OPTIONAL :: prefix_format
1575 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: xscale_opt
1576 INTEGER,
OPTIONAL :: comp_opt
1578 INTEGER :: do_comp, i, j, ncols, nrows
1579 LOGICAL :: do_headers, do_prefix
1580 REAL(kind=
dp) :: xscale
1583 IF (
PRESENT(prefix))
THEN
1584 IF (
PRESENT(prefix_format))
THEN
1587 cpabort(
"Printing of prefix with missing format!")
1592 IF (
PRESENT(xscale_opt)) xscale = xscale_opt
1594 ncols =
SIZE(yvals, 1)
1595 nrows =
SIZE(yvals, 2)
1599 IF (
PRESENT(comp_opt)) do_comp = comp_opt
1601 do_headers =
PRESENT(headers)
1603 IF (do_headers)
THEN
1606 cpabort(
"Not enought headers to print the file!")
1610 IF (
SIZE(xvals) < nrows)
THEN
1611 cpabort(
"Not enough xvals to print all yvals!")
1614 IF (rt_unit > 0)
THEN
1616 IF (do_headers)
THEN
1619 WRITE (rt_unit, prefix_format, advance=
"no") prefix
1621 WRITE (rt_unit,
"(A20)", advance=
"no") headers(1)
1623 SELECT CASE (do_comp)
1626 DO j = 1, 2*ncols - 1
1627 WRITE (rt_unit,
"(A20)", advance=
"no") headers(j + 1)
1629 WRITE (rt_unit,
"(A20)") headers(2*ncols + 1)
1633 WRITE (rt_unit,
"(A20)", advance=
"no") headers(j + 1)
1635 WRITE (rt_unit,
"(A20)") headers(ncols + 1)
1642 WRITE (rt_unit, prefix_format, advance=
"no") prefix
1644 WRITE (rt_unit,
"(E20.8E3)", advance=
"no") xvals(i)*xscale
1646 SELECT CASE (do_comp)
1648 WRITE (rt_unit,
"(E20.8E3)", advance=
"no") &
1651 WRITE (rt_unit,
"(E20.8E3)", advance=
"no") &
1655 WRITE (rt_unit,
"(E20.8E3,E20.8E3)", advance=
"no") &
1656 REAL(yvals(j, i)), aimag(yvals(j, i))
1660 SELECT CASE (do_comp)
1662 WRITE (rt_unit,
"(E20.8E3)") real(yvals(j, i))
1664 WRITE (rt_unit,
"(E20.8E3)") aimag(yvals(j, i))
1667 WRITE (rt_unit,
"(E20.8E3,E20.8E3)") &
1668 REAL(yvals(j, i)), aimag(yvals(j, i))
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, 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, 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.
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 print_rt_file(rt_unit, headers, xvals, yvals, prefix, prefix_format, xscale_opt, comp_opt)
...
subroutine, public rt_prop_output(qs_env, run_type, delta_iter, used_time)
...
subroutine, public print_moments(moments_section, info_unit, moments, time, imag_opt, append_opt)
Print the dipole moments into a file.
subroutine, public rt_convergence(rtp, matrix_s, delta_mos, delta_eps)
computes the convergence criterion for RTP and EMD
integer, parameter, public rt_file_comp_both
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.
integer, parameter, public rt_file_comp_imag
integer, parameter, public rt_file_comp_real
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.