22 dbcsr_type_antisymmetric, dbcsr_type_no_symmetry
96#include "../base/base_uses.f90"
102 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'rt_propagation_output'
120 INTEGER,
INTENT(in) :: run_type
121 REAL(
dp),
INTENT(in),
OPTIONAL :: delta_iter, used_time
123 INTEGER :: i, n_electrons, n_proj, natom, nspin, &
124 output_unit, spin, unit_nr
125 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: first_sgf, last_sgf
126 INTEGER,
DIMENSION(:),
POINTER :: row_blk_sizes
128 REAL(
dp) :: orthonormality, strace, tot_rho_r, trace
129 REAL(kind=
dp),
DIMENSION(:),
POINTER :: qs_tot_rho_r
130 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: j_int
132 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
135 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, p_im, p_xyz, rho_new
139 POINTER :: sab_all, sab_orb
141 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
146 NULLIFY (logger, dft_control)
154 particle_set=particle_set, &
155 atomic_kind_set=atomic_kind_set, &
156 qs_kind_set=qs_kind_set, &
157 dft_control=dft_control, sab_all=sab_all, sab_orb=sab_orb, &
158 dbcsr_dist=dbcsr_dist)
163 n_electrons = n_electrons - dft_control%charge
165 CALL qs_rho_get(rho_struct=rho, tot_rho_r=qs_tot_rho_r)
172 IF (output_unit > 0)
THEN
173 WRITE (output_unit, fmt=
"(/,(T3,A,T40,I5))") &
174 "Information at iteration step:", rtp%iter
175 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
176 "Total electronic density (r-space): ", &
179 REAL(n_electrons,
dp)
180 WRITE (unit=output_unit, fmt=
"((T3,A,T59,F22.14))") &
181 "Total energy:", rtp%energy_new
183 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
184 "Energy difference to previous iteration step:", rtp%energy_new - rtp%energy_old
186 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
187 "Energy difference to initial state:", rtp%energy_new - rtp%energy_old
188 IF (
PRESENT(delta_iter)) &
189 WRITE (unit=output_unit, fmt=
"((T3,A,T61,E20.6))") &
190 "Convergence:", delta_iter
191 IF (rtp%converged)
THEN
193 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F12.2))") &
194 "Time needed for propagation:", used_time
195 WRITE (unit=output_unit, fmt=
"(/,(T3,A,3X,F16.14))") &
196 "CONVERGENCE REACHED", rtp%energy_new - rtp%energy_old
200 IF (rtp%converged)
THEN
201 IF (.NOT. rtp%linear_scaling)
THEN
202 CALL get_rtp(rtp=rtp, mos_new=mos_new)
203 CALL rt_calculate_orthonormality(orthonormality, &
204 mos_new, matrix_s(1)%matrix)
205 IF (output_unit > 0) &
206 WRITE (output_unit, fmt=
"(/,(T3,A,T60,F20.10))") &
207 "Max deviation from orthonormalization:", orthonormality
211 IF (output_unit > 0) &
214 "PRINT%PROGRAM_RUN_INFO")
216 IF (rtp%converged)
THEN
219 dft_section,
"REAL_TIME_PROPAGATION%PRINT%FIELD"),
cp_p_file)) &
220 CALL print_field_applied(qs_env, dft_section)
221 CALL make_moment(qs_env)
223 dft_section,
"REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS"),
cp_p_file))
THEN
224 CALL print_rtp_energy_components(qs_env, dft_section)
226 IF (.NOT. dft_control%qs_control%dftb)
THEN
227 CALL write_available_results(qs_env=qs_env, rtp=rtp)
230 IF (rtp%linear_scaling)
THEN
231 CALL get_rtp(rtp=rtp, rho_new=rho_new)
233 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART"),
cp_p_file))
THEN
234 CALL write_rt_p_to_restart(rho_new, .false.)
237 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART_HISTORY"),
cp_p_file))
THEN
238 CALL write_rt_p_to_restart(rho_new, .true.)
240 IF (.NOT. dft_control%qs_control%dftb)
THEN
243 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
244 DO spin = 1,
SIZE(rho_new)/2
245 CALL rt_current(qs_env, rho_new(2*spin)%matrix, dft_section, spin,
SIZE(rho_new)/2)
250 CALL get_rtp(rtp=rtp, mos_new=mos_new)
251 IF (.NOT. dft_control%qs_control%dftb .AND. .NOT. dft_control%qs_control%xtb)
THEN
252 IF (rtp%track_imag_density)
THEN
253 NULLIFY (p_im, p_xyz)
258 natom =
SIZE(particle_set, 1)
259 ALLOCATE (first_sgf(natom))
260 ALLOCATE (last_sgf(natom))
262 first_sgf=first_sgf, &
264 ALLOCATE (row_blk_sizes(natom))
265 CALL dbcsr_convert_offsets_to_sizes(first_sgf, row_blk_sizes, last_sgf)
266 DEALLOCATE (first_sgf)
267 DEALLOCATE (last_sgf)
269 ALLOCATE (p_xyz(1)%matrix)
272 dist=dbcsr_dist, matrix_type=dbcsr_type_antisymmetric, &
273 row_blk_size=row_blk_sizes, col_blk_size=row_blk_sizes, &
278 ALLOCATE (p_xyz(i)%matrix)
283 DEALLOCATE (row_blk_sizes)
285 nspin =
SIZE(mos_new)/2
287 ALLOCATE (j_int(nspin, 3))
292 CALL dbcsr_create(tmp_ao, template=matrix_s(1)%matrix, matrix_type=dbcsr_type_no_symmetry, name=
"tmp")
300 CALL dbcsr_multiply(
"T",
"N", 1.0_dp, p_im(spin)%matrix, p_xyz(i)%matrix, &
303 strace = strace + trace
304 j_int(spin, i) = strace
310 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT_INT"),
cp_p_file))
THEN
314 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT", extension=
".dat", is_new_file=new_file)
315 IF (output_unit > 0)
THEN
317 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
318 j_int(1, 1:3), j_int(2, 1:3)
320 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
325 "REAL_TIME_PROPAGATION%PRINT%CURRENT_INT")
330 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
332 CALL rt_current(qs_env, p_im(spin)%matrix, dft_section, spin, nspin)
340 IF (dft_control%rtp_control%is_proj_mo)
THEN
341 DO n_proj = 1,
SIZE(dft_control%rtp_control%proj_mo_list)
343 dft_control%rtp_control%proj_mo_list(n_proj)%proj_mo, n_proj)
348 dft_section, qs_kind_set)
352 rtp%energy_old = rtp%energy_new
354 IF (.NOT. rtp%converged .AND. rtp%iter >= dft_control%rtp_control%max_iter) &
355 CALL cp_abort(__location__,
"EMD did not converge, either increase MAX_ITER "// &
356 "or use a smaller TIMESTEP")
368 SUBROUTINE rt_calculate_orthonormality(orthonormality, mos_new, matrix_s)
369 REAL(kind=
dp),
INTENT(out) :: orthonormality
370 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
371 TYPE(
dbcsr_type),
OPTIONAL,
POINTER :: matrix_s
373 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_calculate_orthonormality'
375 INTEGER :: handle, i, im, ispin, j, k, n, &
376 ncol_local, nrow_local, nspin, re
377 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
378 REAL(kind=
dp) :: alpha, max_alpha, max_beta
380 TYPE(
cp_fm_type) :: overlap_re, svec_im, svec_re
382 NULLIFY (tmp_fm_struct)
384 CALL timeset(routinen, handle)
386 nspin =
SIZE(mos_new)/2
396 nrow_global=n, ncol_global=k)
404 para_env=mos_new(re)%matrix_struct%para_env, &
405 context=mos_new(re)%matrix_struct%context)
411 svec_re, 0.0_dp, overlap_re)
413 svec_im, 1.0_dp, overlap_re)
418 CALL cp_fm_get_info(overlap_re, nrow_local=nrow_local, ncol_local=ncol_local, &
419 row_indices=row_indices, col_indices=col_indices)
422 alpha = overlap_re%local_data(i, j)
423 IF (row_indices(i) .EQ. col_indices(j)) alpha = alpha - 1.0_dp
424 max_alpha = max(max_alpha, abs(alpha))
429 CALL mos_new(1)%matrix_struct%para_env%max(max_alpha)
430 CALL mos_new(1)%matrix_struct%para_env%max(max_beta)
431 orthonormality = max_alpha
433 CALL timestop(handle)
435 END SUBROUTINE rt_calculate_orthonormality
449 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: delta_mos
450 REAL(
dp),
INTENT(out) :: delta_eps
452 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence'
453 REAL(kind=
dp),
PARAMETER :: one = 1.0_dp, zero = 0.0_dp
455 INTEGER :: handle, i, icol, im, ispin, j, lcol, &
456 lrow, nao, newdim, nmo, nspin, re
457 LOGICAL :: double_col, double_row
458 REAL(kind=
dp) :: alpha, max_alpha
461 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
463 NULLIFY (tmp_fm_struct)
465 CALL timeset(routinen, handle)
467 CALL get_rtp(rtp=rtp, mos_new=mos_new)
469 nspin =
SIZE(delta_mos)/2
472 DO i = 1,
SIZE(mos_new)
483 delta_mos(re)%matrix_struct, &
484 delta_mos(re)%matrix_struct%context, &
491 CALL cp_fm_get_info(delta_mos(re), ncol_local=lcol, ncol_global=nmo, &
498 work%local_data(:, icol) = delta_mos(re)%local_data(:, icol)
499 work%local_data(:, icol + lcol) = delta_mos(im)%local_data(:, icol)
507 para_env=delta_mos(re)%matrix_struct%para_env, &
508 context=delta_mos(re)%matrix_struct%context)
511 delta_mos(re)%matrix_struct%context, &
518 CALL parallel_gemm(
"T",
"N", nmo, newdim, nao, one, delta_mos(re), &
521 CALL parallel_gemm(
"T",
"N", nmo, newdim, nao, one, delta_mos(im), &
527 alpha = sqrt((work%local_data(i, j) + work2%local_data(i, j + lcol))**2 + &
528 (work%local_data(i, j + lcol) - work2%local_data(i, j))**2)
529 max_alpha = max(max_alpha, abs(alpha))
542 CALL delta_mos(1)%matrix_struct%para_env%max(max_alpha)
543 delta_eps = sqrt(max_alpha)
545 CALL timestop(handle)
561 REAL(
dp),
INTENT(out) :: delta_eps
563 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence_density'
564 REAL(kind=
dp),
PARAMETER :: one = 1.0_dp, zero = 0.0_dp
566 INTEGER :: col_atom, handle, i, ispin, row_atom
567 REAL(
dp) :: alpha, max_alpha
568 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_values
574 CALL timeset(routinen, handle)
576 CALL get_rtp(rtp=rtp, rho_new=rho_new)
578 DO i = 1,
SIZE(rho_new)
579 CALL dbcsr_add(delta_p(i)%matrix, rho_new(i)%matrix, one, -one)
582 DO i = 1,
SIZE(delta_p)
587 block_values = block_values*block_values
593 CALL dbcsr_create(tmp, template=delta_p(1)%matrix, matrix_type=
"N")
594 DO ispin = 1,
SIZE(delta_p)/2
596 CALL dbcsr_add(delta_p(2*ispin)%matrix, tmp, one, one)
600 DO ispin = 1,
SIZE(delta_p)/2
604 alpha = maxval(block_values)
605 IF (alpha > max_alpha) max_alpha = alpha
610 CALL group%max(max_alpha)
611 delta_eps = sqrt(max_alpha)
613 CALL timestop(handle)
623 SUBROUTINE make_moment(qs_env)
627 CHARACTER(len=*),
PARAMETER :: routinen =
'make_moment'
629 INTEGER :: handle, output_unit
633 CALL timeset(routinen, handle)
635 NULLIFY (dft_control)
639 CALL get_qs_env(qs_env, dft_control=dft_control)
640 IF (dft_control%qs_control%dftb)
THEN
642 ELSE IF (dft_control%qs_control%xtb)
THEN
647 CALL timestop(handle)
649 END SUBROUTINE make_moment
660 REAL(kind=
dp) :: filter_eps
663 CHARACTER(len=*),
PARAMETER :: routinen =
'report_density_occupation'
665 INTEGER :: handle, i, im, ispin, re, unit_nr
666 REAL(kind=
dp) :: eps, occ
670 CALL timeset(routinen, handle)
678 CALL dbcsr_create(tmp(i)%matrix, template=rho(i)%matrix)
681 DO ispin = 1,
SIZE(rho)/2
684 eps = max(filter_eps, 1.0e-11_dp)
685 DO WHILE (eps < 1.1_dp)
688 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
689 ispin,
" eps ", eps,
" real: ", occ
692 eps = max(filter_eps, 1.0e-11_dp)
693 DO WHILE (eps < 1.1_dp)
696 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
697 ispin,
" eps ", eps,
" imag: ", occ
702 CALL timestop(handle)
713 SUBROUTINE write_rt_p_to_restart(rho_new, history)
718 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_rt_p_to_restart'
720 CHARACTER(LEN=default_path_length) :: file_name, project_name
721 INTEGER :: handle, im, ispin, re, unit_nr
722 REAL(kind=
dp) :: cs_pos
725 CALL timeset(routinen, handle)
727 IF (logger%para_env%is_source())
THEN
733 project_name = logger%iter_info%project_name
734 DO ispin = 1,
SIZE(rho_new)/2
738 WRITE (file_name,
'(A,I0,A)') &
739 trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
741 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_RESTART.dm"
744 IF (unit_nr > 0)
THEN
745 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
749 WRITE (file_name,
'(A,I0,A)') &
750 trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
752 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_RESTART.dm"
755 IF (unit_nr > 0)
THEN
756 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
761 CALL timestop(handle)
763 END SUBROUTINE write_rt_p_to_restart
774 SUBROUTINE rt_current(qs_env, P_im, dft_section, spin, nspin)
778 INTEGER :: spin, nspin
780 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_current'
782 CHARACTER(len=1) :: char_spin
783 CHARACTER(len=14) :: ext
784 CHARACTER(len=2) :: sdir
785 INTEGER :: dir, handle, print_unit
786 INTEGER,
DIMENSION(:),
POINTER :: stride(:)
798 CALL timeset(routinen, handle)
801 CALL get_qs_env(qs_env=qs_env, subsys=subsys, pw_env=pw_env)
803 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
815 current_env%gauge = -1
816 current_env%gauge_init = .false.
817 CALL auxbas_pw_pool%create_pw(rs)
818 CALL auxbas_pw_pool%create_pw(gs)
828 CALL calculate_jrho_resp(zero, tmp, zero, zero, dir, dir, rs, gs, qs_env, current_env, retain_rsgrid=.true.)
830 stride =
section_get_ivals(dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT%STRIDE")
834 ELSEIF (dir == 2)
THEN
839 WRITE (char_spin,
"(I1)") spin
841 ext =
"-SPIN-"//char_spin//sdir//
".cube"
844 extension=ext, file_status=
"REPLACE", file_action=
"WRITE", &
845 log_filename=.false., mpi_io=mpi_io)
847 CALL cp_pw_to_cube(rs, print_unit,
"EMD current", particles=particles, stride=stride, &
855 CALL auxbas_pw_pool%give_back_pw(rs)
856 CALL auxbas_pw_pool%give_back_pw(gs)
863 CALL timestop(handle)
865 END SUBROUTINE rt_current
877 SUBROUTINE write_available_results(qs_env, rtp)
881 CHARACTER(len=*),
PARAMETER :: routinen =
'write_available_results'
886 CALL timeset(routinen, handle)
889 IF (rtp%linear_scaling)
THEN
899 CALL timestop(handle)
901 END SUBROUTINE write_available_results
911 SUBROUTINE print_field_applied(qs_env, dft_section)
915 CHARACTER(LEN=3),
DIMENSION(3) :: rlab
916 CHARACTER(LEN=default_path_length) :: filename
917 INTEGER :: i, i_step, output_unit, unit_nr
919 REAL(kind=
dp) :: field(3)
924 NULLIFY (dft_control)
929 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp)
934 "REAL_TIME_PROPAGATION%PRINT%FIELD", extension=
".dat", is_new_file=new_file)
936 IF (output_unit > 0)
THEN
937 rlab = [
CHARACTER(LEN=3) ::
"X",
"Y",
"Z"]
938 IF (unit_nr /= output_unit)
THEN
939 INQUIRE (unit=unit_nr, name=filename)
940 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
941 "FIELD",
"The field applied is written to the file:", &
944 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"FIELD APPLIED [a.u.]"
945 WRITE (unit=output_unit, fmt=
"(T5,3(A,A,E16.8,1X))") &
946 (trim(rlab(i)),
"=", dft_control%rtp_control%field(i), i=1, 3)
950 IF (dft_control%apply_efield_field)
THEN
951 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,3(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z"
952 ELSE IF (dft_control%apply_vector_potential)
THEN
953 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,6(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z", &
954 " Vec. Pot. X",
" Vec. Pot. Y",
" Vec. Pot. Z"
959 IF (dft_control%apply_efield_field)
THEN
960 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
961 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
962 field(1), field(2), field(3)
966 ELSE IF (dft_control%apply_vector_potential)
THEN
967 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
968 dft_control%rtp_control%field(1), dft_control%rtp_control%field(2), dft_control%rtp_control%field(3), &
969 dft_control%rtp_control%vec_pot(1), dft_control%rtp_control%vec_pot(2), dft_control%rtp_control%vec_pot(3)
975 "REAL_TIME_PROPAGATION%PRINT%FIELD")
977 END SUBROUTINE print_field_applied
986 SUBROUTINE print_rtp_energy_components(qs_env, dft_section)
990 CHARACTER(LEN=default_path_length) :: filename
991 INTEGER :: i_step, output_unit, unit_nr
998 NULLIFY (dft_control, energy, rtp)
1003 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp, energy=energy)
1007 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS", extension=
".ener", &
1008 file_action=
"WRITE", is_new_file=new_file)
1010 IF (output_unit > 0)
THEN
1011 IF (unit_nr /= output_unit)
THEN
1012 INQUIRE (unit=unit_nr, name=filename)
1013 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
1014 "ENERGY_CONSTITUENTS",
"Total Energy constituents written to file:", &
1017 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"ENERGY_CONSTITUENTS"
1023 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,10(6X,A))')
"Step Nr.",
"Time[fs]", &
1024 "Total ener.[a.u.]",
"core[a.u.] ",
" overlap [a.u.]",
"hartree[a.u.]",
" exc. [a.u.] ", &
1025 " hartree 1c[a.u.]",
"exc 1c[a.u.] ",
"exc admm[a.u.]",
"exc 1c admm[a.u.]",
"efield LG"
1028 WRITE (unit=unit_nr, fmt=
"(I10,F20.6,10(F20.9))") &
1030 energy%total, energy%core, energy%core_overlap, energy%hartree, energy%exc, &
1031 energy%hartree_1c, energy%exc1, energy%exc_aux_fit, energy%exc1_aux_fit, energy%efield_core
1036 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS")
1038 END SUBROUTINE print_rtp_energy_components
Define the atomic kind types and their sub types.
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
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
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
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
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, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
Define the quickstep kind type and their sub types.
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)
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)
...
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.
Routine for the real time propagation output.
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 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.
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.