89#include "../base/base_uses.f90"
95 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'rt_propagation_output'
113 INTEGER,
INTENT(in) :: run_type
114 REAL(
dp),
INTENT(in),
OPTIONAL :: delta_iter, used_time
116 INTEGER :: n_electrons, n_proj, nspin, output_unit, &
118 REAL(
dp) :: orthonormality, tot_rho_r
119 REAL(kind=
dp),
DIMENSION(:),
POINTER :: qs_tot_rho_r
121 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
123 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: matrix_s, p_im, rho_new
126 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
131 NULLIFY (logger, dft_control)
139 particle_set=particle_set, &
140 atomic_kind_set=atomic_kind_set, &
141 qs_kind_set=qs_kind_set, &
142 dft_control=dft_control)
147 n_electrons = n_electrons - dft_control%charge
149 CALL qs_rho_get(rho_struct=rho, tot_rho_r=qs_tot_rho_r)
156 IF (output_unit > 0)
THEN
157 WRITE (output_unit, fmt=
"(/,(T3,A,T40,I5))") &
158 "Information at iteration step:", rtp%iter
159 WRITE (unit=output_unit, fmt=
"((T3,A,T41,2F20.10))") &
160 "Total electronic density (r-space): ", &
163 REAL(n_electrons,
dp)
164 WRITE (unit=output_unit, fmt=
"((T3,A,T59,F22.14))") &
165 "Total energy:", rtp%energy_new
167 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
168 "Energy difference to previous iteration step:", rtp%energy_new - rtp%energy_old
170 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F20.14))") &
171 "Energy difference to initial state:", rtp%energy_new - rtp%energy_old
172 IF (
PRESENT(delta_iter)) &
173 WRITE (unit=output_unit, fmt=
"((T3,A,T61,E20.6))") &
174 "Convergence:", delta_iter
175 IF (rtp%converged)
THEN
177 WRITE (unit=output_unit, fmt=
"((T3,A,T61,F12.2))") &
178 "Time needed for propagation:", used_time
179 WRITE (unit=output_unit, fmt=
"(/,(T3,A,3X,F16.14))") &
180 "CONVERGENCE REACHED", rtp%energy_new - rtp%energy_old
184 IF (rtp%converged)
THEN
185 IF (.NOT. rtp%linear_scaling)
THEN
186 CALL get_rtp(rtp=rtp, mos_new=mos_new)
187 CALL rt_calculate_orthonormality(orthonormality, &
188 mos_new, matrix_s(1)%matrix)
189 IF (output_unit > 0) &
190 WRITE (output_unit, fmt=
"(/,(T3,A,T60,F20.10))") &
191 "Max deviation from orthonormalization:", orthonormality
195 IF (output_unit > 0) &
198 "PRINT%PROGRAM_RUN_INFO")
200 IF (rtp%converged)
THEN
203 dft_section,
"REAL_TIME_PROPAGATION%PRINT%FIELD"),
cp_p_file)) &
204 CALL print_field_applied(qs_env, dft_section)
205 CALL make_moment(qs_env)
207 dft_section,
"REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS"),
cp_p_file))
THEN
208 CALL print_rtp_energy_components(qs_env, dft_section)
210 IF (.NOT. dft_control%qs_control%dftb)
THEN
211 CALL write_available_results(qs_env=qs_env, rtp=rtp)
213 IF (rtp%linear_scaling)
THEN
214 CALL get_rtp(rtp=rtp, rho_new=rho_new)
216 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART"),
cp_p_file))
THEN
217 CALL write_rt_p_to_restart(rho_new, .false.)
220 dft_section,
"REAL_TIME_PROPAGATION%PRINT%RESTART_HISTORY"),
cp_p_file))
THEN
221 CALL write_rt_p_to_restart(rho_new, .true.)
223 IF (.NOT. dft_control%qs_control%dftb)
THEN
226 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
227 DO spin = 1,
SIZE(rho_new)/2
228 CALL rt_current(qs_env, rho_new(2*spin)%matrix, dft_section, spin,
SIZE(rho_new)/2)
233 CALL get_rtp(rtp=rtp, mos_new=mos_new)
234 IF (.NOT. dft_control%qs_control%dftb)
THEN
236 dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT"),
cp_p_file))
THEN
238 nspin =
SIZE(mos_new)/2
242 CALL dbcsr_create(p_im(spin)%matrix, template=matrix_s(1)%matrix, matrix_type=
"N")
246 CALL rt_current(qs_env, p_im(spin)%matrix, dft_section, spin, nspin)
250 IF (dft_control%rtp_control%is_proj_mo)
THEN
251 DO n_proj = 1,
SIZE(dft_control%rtp_control%proj_mo_list)
253 dft_control%rtp_control%proj_mo_list(n_proj)%proj_mo, n_proj)
258 dft_section, qs_kind_set)
262 rtp%energy_old = rtp%energy_new
264 IF (.NOT. rtp%converged .AND. rtp%iter >= dft_control%rtp_control%max_iter) &
265 CALL cp_abort(__location__,
"EMD did not converge, either increase MAX_ITER "// &
266 "or use a smaller TIMESTEP")
278 SUBROUTINE rt_calculate_orthonormality(orthonormality, mos_new, matrix_s)
279 REAL(kind=
dp),
INTENT(out) :: orthonormality
280 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
281 TYPE(
dbcsr_type),
OPTIONAL,
POINTER :: matrix_s
283 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_calculate_orthonormality'
285 INTEGER :: handle, i, im, ispin, j, k, n, &
286 ncol_local, nrow_local, nspin, re
287 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
288 REAL(kind=
dp) :: alpha, max_alpha, max_beta
290 TYPE(
cp_fm_type) :: overlap_re, svec_im, svec_re
292 NULLIFY (tmp_fm_struct)
294 CALL timeset(routinen, handle)
296 nspin =
SIZE(mos_new)/2
306 nrow_global=n, ncol_global=k)
314 para_env=mos_new(re)%matrix_struct%para_env, &
315 context=mos_new(re)%matrix_struct%context)
321 svec_re, 0.0_dp, overlap_re)
323 svec_im, 1.0_dp, overlap_re)
328 CALL cp_fm_get_info(overlap_re, nrow_local=nrow_local, ncol_local=ncol_local, &
329 row_indices=row_indices, col_indices=col_indices)
332 alpha = overlap_re%local_data(i, j)
333 IF (row_indices(i) .EQ. col_indices(j)) alpha = alpha - 1.0_dp
334 max_alpha = max(max_alpha, abs(alpha))
339 CALL mos_new(1)%matrix_struct%para_env%max(max_alpha)
340 CALL mos_new(1)%matrix_struct%para_env%max(max_beta)
341 orthonormality = max_alpha
343 CALL timestop(handle)
345 END SUBROUTINE rt_calculate_orthonormality
359 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: delta_mos
360 REAL(
dp),
INTENT(out) :: delta_eps
362 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence'
363 REAL(kind=
dp),
PARAMETER :: one = 1.0_dp, zero = 0.0_dp
365 INTEGER :: handle, i, icol, im, ispin, j, lcol, &
366 lrow, nao, newdim, nmo, nspin, re
367 LOGICAL :: double_col, double_row
368 REAL(kind=
dp) :: alpha, max_alpha
371 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: mos_new
373 NULLIFY (tmp_fm_struct)
375 CALL timeset(routinen, handle)
377 CALL get_rtp(rtp=rtp, mos_new=mos_new)
379 nspin =
SIZE(delta_mos)/2
382 DO i = 1,
SIZE(mos_new)
393 delta_mos(re)%matrix_struct, &
394 delta_mos(re)%matrix_struct%context, &
401 CALL cp_fm_get_info(delta_mos(re), ncol_local=lcol, ncol_global=nmo, &
408 work%local_data(:, icol) = delta_mos(re)%local_data(:, icol)
409 work%local_data(:, icol + lcol) = delta_mos(im)%local_data(:, icol)
417 para_env=delta_mos(re)%matrix_struct%para_env, &
418 context=delta_mos(re)%matrix_struct%context)
421 delta_mos(re)%matrix_struct%context, &
428 CALL parallel_gemm(
"T",
"N", nmo, newdim, nao, one, delta_mos(re), &
431 CALL parallel_gemm(
"T",
"N", nmo, newdim, nao, one, delta_mos(im), &
437 alpha = sqrt((work%local_data(i, j) + work2%local_data(i, j + lcol))**2 + &
438 (work%local_data(i, j + lcol) - work2%local_data(i, j))**2)
439 max_alpha = max(max_alpha, abs(alpha))
452 CALL delta_mos(1)%matrix_struct%para_env%max(max_alpha)
453 delta_eps = sqrt(max_alpha)
455 CALL timestop(handle)
471 REAL(
dp),
INTENT(out) :: delta_eps
473 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_convergence_density'
474 REAL(kind=
dp),
PARAMETER :: one = 1.0_dp, zero = 0.0_dp
476 INTEGER :: col_atom, handle, i, ispin, row_atom
477 REAL(
dp) :: alpha, max_alpha
478 REAL(
dp),
DIMENSION(:, :),
POINTER :: block_values
484 CALL timeset(routinen, handle)
486 CALL get_rtp(rtp=rtp, rho_new=rho_new)
488 DO i = 1,
SIZE(rho_new)
489 CALL dbcsr_add(delta_p(i)%matrix, rho_new(i)%matrix, one, -one)
492 DO i = 1,
SIZE(delta_p)
497 block_values = block_values*block_values
503 CALL dbcsr_create(tmp, template=delta_p(1)%matrix, matrix_type=
"N")
504 DO ispin = 1,
SIZE(delta_p)/2
506 CALL dbcsr_add(delta_p(2*ispin)%matrix, tmp, one, one)
510 DO ispin = 1,
SIZE(delta_p)/2
514 alpha = maxval(block_values)
515 IF (alpha > max_alpha) max_alpha = alpha
520 CALL group%max(max_alpha)
521 delta_eps = sqrt(max_alpha)
523 CALL timestop(handle)
533 SUBROUTINE make_moment(qs_env)
537 CHARACTER(len=*),
PARAMETER :: routinen =
'make_moment'
539 INTEGER :: handle, output_unit
543 CALL timeset(routinen, handle)
545 NULLIFY (dft_control)
549 CALL get_qs_env(qs_env, dft_control=dft_control)
550 IF (dft_control%qs_control%dftb)
THEN
552 ELSE IF (dft_control%qs_control%xtb)
THEN
557 CALL timestop(handle)
559 END SUBROUTINE make_moment
570 REAL(kind=
dp) :: filter_eps
573 CHARACTER(len=*),
PARAMETER :: routinen =
'report_density_occupation'
575 INTEGER :: handle, i, im, ispin, re, unit_nr
576 REAL(kind=
dp) :: eps, occ
580 CALL timeset(routinen, handle)
588 CALL dbcsr_create(tmp(i)%matrix, template=rho(i)%matrix)
591 DO ispin = 1,
SIZE(rho)/2
594 eps = max(filter_eps, 1.0e-11_dp)
595 DO WHILE (eps < 1.1_dp)
598 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
599 ispin,
" eps ", eps,
" real: ", occ
602 eps = max(filter_eps, 1.0e-11_dp)
603 DO WHILE (eps < 1.1_dp)
606 IF (unit_nr > 0)
WRITE (unit_nr, fmt=
"((T3,A,I1,A,F15.12,A,T61,F20.10))")
"Occupation of rho spin ", &
607 ispin,
" eps ", eps,
" imag: ", occ
612 CALL timestop(handle)
623 SUBROUTINE write_rt_p_to_restart(rho_new, history)
628 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_rt_p_to_restart'
630 CHARACTER(LEN=default_path_length) :: file_name, project_name
631 INTEGER :: handle, im, ispin, re, unit_nr
632 REAL(kind=
dp) :: cs_pos
635 CALL timeset(routinen, handle)
637 IF (logger%para_env%is_source())
THEN
643 project_name = logger%iter_info%project_name
644 DO ispin = 1,
SIZE(rho_new)/2
648 WRITE (file_name,
'(A,I0,A)') &
649 trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
651 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_RE", ispin,
"_RESTART.dm"
654 IF (unit_nr > 0)
THEN
655 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
659 WRITE (file_name,
'(A,I0,A)') &
660 trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_"//trim(
cp_iter_string(logger%iter_info))//
"_RESTART.dm"
662 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_LS_DM_SPIN_IM", ispin,
"_RESTART.dm"
665 IF (unit_nr > 0)
THEN
666 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
671 CALL timestop(handle)
673 END SUBROUTINE write_rt_p_to_restart
684 SUBROUTINE rt_current(qs_env, P_im, dft_section, spin, nspin)
688 INTEGER :: spin, nspin
690 CHARACTER(len=*),
PARAMETER :: routinen =
'rt_current'
692 CHARACTER(len=1) :: char_spin
693 CHARACTER(len=14) :: ext
694 CHARACTER(len=2) :: sdir
695 INTEGER :: dir, handle, print_unit
696 INTEGER,
DIMENSION(:),
POINTER :: stride(:)
708 CALL timeset(routinen, handle)
711 CALL get_qs_env(qs_env=qs_env, subsys=subsys, pw_env=pw_env)
713 CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
725 current_env%gauge = -1
726 current_env%gauge_init = .false.
727 CALL auxbas_pw_pool%create_pw(rs)
728 CALL auxbas_pw_pool%create_pw(gs)
738 CALL calculate_jrho_resp(zero, tmp, zero, zero, dir, dir, rs, gs, qs_env, current_env, retain_rsgrid=.true.)
740 stride =
section_get_ivals(dft_section,
"REAL_TIME_PROPAGATION%PRINT%CURRENT%STRIDE")
744 ELSEIF (dir == 2)
THEN
749 WRITE (char_spin,
"(I1)") spin
751 ext =
"-SPIN-"//char_spin//sdir//
".cube"
754 extension=ext, file_status=
"REPLACE", file_action=
"WRITE", &
755 log_filename=.false., mpi_io=mpi_io)
757 CALL cp_pw_to_cube(rs, print_unit,
"EMD current", particles=particles, stride=stride, &
765 CALL auxbas_pw_pool%give_back_pw(rs)
766 CALL auxbas_pw_pool%give_back_pw(gs)
773 CALL timestop(handle)
775 END SUBROUTINE rt_current
787 SUBROUTINE write_available_results(qs_env, rtp)
791 CHARACTER(len=*),
PARAMETER :: routinen =
'write_available_results'
796 CALL timeset(routinen, handle)
799 IF (rtp%linear_scaling)
THEN
809 CALL timestop(handle)
811 END SUBROUTINE write_available_results
821 SUBROUTINE print_field_applied(qs_env, dft_section)
825 CHARACTER(LEN=3),
DIMENSION(3) :: rlab
826 CHARACTER(LEN=default_path_length) :: filename
827 INTEGER :: i, i_step, output_unit, unit_nr
829 REAL(kind=
dp) :: field(3)
834 NULLIFY (dft_control)
839 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp)
844 "REAL_TIME_PROPAGATION%PRINT%FIELD", extension=
".dat", is_new_file=new_file)
846 IF (output_unit > 0)
THEN
847 rlab = [
CHARACTER(LEN=3) ::
"X",
"Y",
"Z"]
848 IF (unit_nr /= output_unit)
THEN
849 INQUIRE (unit=unit_nr, name=filename)
850 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
851 "FIELD",
"The field applied is written to the file:", &
854 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"FIELD APPLIED [a.u.]"
855 WRITE (unit=output_unit, fmt=
"(T5,3(A,A,E16.8,1X))") &
856 (trim(rlab(i)),
"=", dft_control%rtp_control%field(i), i=1, 3)
860 IF (dft_control%apply_efield_field)
THEN
861 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,3(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z"
862 ELSE IF (dft_control%apply_vector_potential)
THEN
863 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,6(6X,A))')
"Step Nr.",
"Time[fs]",
" Field X",
" Field Y",
" Field Z", &
864 " Vec. Pot. X",
" Vec. Pot. Y",
" Vec. Pot. Z"
869 IF (dft_control%apply_efield_field)
THEN
870 CALL make_field(dft_control, field, qs_env%sim_step, qs_env%sim_time)
871 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,3(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
872 field(1), field(2), field(3)
876 ELSE IF (dft_control%apply_vector_potential)
THEN
877 WRITE (unit=unit_nr, fmt=
"(I10,F16.6,6(F16.8,1X))") qs_env%sim_step, qs_env%sim_time*
femtoseconds, &
878 dft_control%rtp_control%field(1), dft_control%rtp_control%field(2), dft_control%rtp_control%field(3), &
879 dft_control%rtp_control%vec_pot(1), dft_control%rtp_control%vec_pot(2), dft_control%rtp_control%vec_pot(3)
885 "REAL_TIME_PROPAGATION%PRINT%FIELD")
887 END SUBROUTINE print_field_applied
896 SUBROUTINE print_rtp_energy_components(qs_env, dft_section)
900 CHARACTER(LEN=default_path_length) :: filename
901 INTEGER :: i_step, output_unit, unit_nr
908 NULLIFY (dft_control, energy, rtp)
913 CALL get_qs_env(qs_env, dft_control=dft_control, rtp=rtp, energy=energy)
917 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS", extension=
".ener", &
918 file_action=
"WRITE", is_new_file=new_file)
920 IF (output_unit > 0)
THEN
921 IF (unit_nr /= output_unit)
THEN
922 INQUIRE (unit=unit_nr, name=filename)
923 WRITE (unit=output_unit, fmt=
"(/,T2,A,2(/,T3,A),/)") &
924 "ENERGY_CONSTITUENTS",
"Total Energy constituents written to file:", &
927 WRITE (unit=output_unit, fmt=
"(/,T2,A)")
"ENERGY_CONSTITUENTS"
933 WRITE (unit=unit_nr, fmt=
'("#",5X,A,8X,A,10(6X,A))')
"Step Nr.",
"Time[fs]", &
934 "Total ener.[a.u.]",
"core[a.u.] ",
" overlap [a.u.]",
"hartree[a.u.]",
" exc. [a.u.] ", &
935 " hartree 1c[a.u.]",
"exc 1c[a.u.] ",
"exc admm[a.u.]",
"exc 1c admm[a.u.]",
"efield LG"
938 WRITE (unit=unit_nr, fmt=
"(I10,F20.6,10(F20.9))") &
940 energy%total, energy%core, energy%core_overlap, energy%hartree, energy%exc, &
941 energy%hartree_1c, energy%exc1, energy%exc_aux_fit, energy%exc1_aux_fit, energy%efield_core
946 "REAL_TIME_PROPAGATION%PRINT%E_CONSTITUENTS")
948 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_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.
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 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)
...
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...
subroutine, public calculate_p_imaginary(qs_env, rtp, matrix_p_im, keep_sparsity)
...
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.