90#include "./base/base_uses.f90"
96 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_mo_io'
120 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(IN) :: mo_array
123 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
127 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_mo_set_to_restart'
128 CHARACTER(LEN=30),
DIMENSION(2),
PARAMETER :: &
129 keys = [
"SCF%PRINT%RESTART_HISTORY",
"SCF%PRINT%RESTART "]
131 INTEGER :: handle, ikey, ires, ispin
134 CALL timeset(routinen, handle)
143 IF (mo_array(1)%use_mo_coeff_b)
THEN
146 DO ispin = 1,
SIZE(mo_array)
147 cpassert(
ASSOCIATED(mo_array(ispin)%mo_coeff_b))
149 mo_array(ispin)%mo_coeff)
153 DO ikey = 1,
SIZE(keys)
155 dft_section, keys(ikey)),
cp_p_file))
THEN
157 extension=
".wfn", file_status=
"REPLACE", file_action=
"WRITE", &
158 do_backup=.true., file_form=
"UNFORMATTED")
159 IF (
PRESENT(matrix_ks))
THEN
160 CALL write_mo_set_low(mo_array, particle_set=particle_set, qs_kind_set=qs_kind_set, &
161 ires=ires, matrix_ks=matrix_ks)
163 CALL write_mo_set_low(mo_array, particle_set=particle_set, qs_kind_set=qs_kind_set, &
171 CALL timestop(handle)
185 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(IN) :: mo_array
187 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: tmpl_matrix
189 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_dm_binary_restart'
191 CHARACTER(LEN=default_path_length) :: file_name, project_name
192 INTEGER :: handle, ispin, unit_nr
193 LOGICAL :: do_dm_restart
194 REAL(kind=
dp) :: cs_pos
198 CALL timeset(routinen, handle)
200 IF (logger%para_env%is_source())
THEN
206 project_name = logger%iter_info%project_name
208 NULLIFY (matrix_p_tmp)
210 IF (do_dm_restart)
THEN
211 ALLOCATE (matrix_p_tmp)
212 DO ispin = 1,
SIZE(mo_array)
213 CALL dbcsr_create(matrix_p_tmp, template=tmpl_matrix(ispin)%matrix, name=
"DM RESTART")
215 IF (.NOT.
ASSOCIATED(mo_array(ispin)%mo_coeff_b)) cpabort(
"mo_coeff_b NOT ASSOCIATED")
219 use_dbcsr=.true., retain_sparsity=.false.)
221 WRITE (file_name,
'(A,I0,A)') trim(project_name)//
"_SCF_DM_SPIN_", ispin,
"_RESTART.dm"
223 IF (unit_nr > 0)
THEN
224 WRITE (unit_nr,
'(T2,A,E20.8)')
"Writing restart DM "//trim(file_name)//
" with checksum: ", cs_pos
230 DEALLOCATE (matrix_p_tmp)
233 CALL timestop(handle)
247 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(IN) :: mo_array
248 TYPE(
cp_fm_type),
DIMENSION(:),
INTENT(IN) :: rt_mos
251 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
253 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_rt_mos_to_restart'
254 CHARACTER(LEN=43),
DIMENSION(2),
PARAMETER :: keys = [ &
255 "REAL_TIME_PROPAGATION%PRINT%RESTART_HISTORY", &
256 "REAL_TIME_PROPAGATION%PRINT%RESTART "]
258 INTEGER :: handle, ikey, ires
261 CALL timeset(routinen, handle)
269 DO ikey = 1,
SIZE(keys)
272 dft_section, keys(ikey)),
cp_p_file))
THEN
274 extension=
".rtpwfn", file_status=
"REPLACE", file_action=
"WRITE", &
275 do_backup=.true., file_form=
"UNFORMATTED")
276 CALL write_mo_set_low(mo_array, qs_kind_set=qs_kind_set, particle_set=particle_set, &
277 ires=ires, rt_mos=rt_mos)
283 CALL timestop(handle)
298 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(IN) :: mo_array
299 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
307 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_mo_set_low'
309 INTEGER :: handle, iatom, ikind, imat, iset, &
310 ishell, ispin, lmax, lshell, &
311 max_block, nao, natom, nmo, nset, &
312 nset_max, nshell_max, nspin
313 INTEGER,
DIMENSION(:),
POINTER :: nset_info, nshell
314 INTEGER,
DIMENSION(:, :),
POINTER :: l, nshell_info
315 INTEGER,
DIMENSION(:, :, :),
POINTER :: nso_info
316 REAL(kind=
dp),
DIMENSION(:),
POINTER :: mo_eigenvalues, mo_occupation_numbers
321 CALL timeset(routinen, handle)
324 NULLIFY (mo_eigenvalues)
325 NULLIFY (mo_occupation_numbers)
327 nspin =
SIZE(mo_array)
328 nao = mo_array(1)%nao
332 natom =
SIZE(particle_set, 1)
337 NULLIFY (orb_basis_set, dftb_parameter)
338 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
340 basis_set=orb_basis_set, &
341 dftb_parameter=dftb_parameter)
342 IF (
ASSOCIATED(orb_basis_set))
THEN
347 nset_max = max(nset_max, nset)
349 nshell_max = max(nshell_max, nshell(iset))
351 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
353 nset_max = max(nset_max, 1)
354 nshell_max = max(nshell_max, lmax + 1)
361 ALLOCATE (nso_info(nshell_max, nset_max, natom))
362 nso_info(:, :, :) = 0
364 ALLOCATE (nshell_info(nset_max, natom))
365 nshell_info(:, :) = 0
367 ALLOCATE (nset_info(natom))
371 NULLIFY (orb_basis_set, dftb_parameter)
372 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
374 basis_set=orb_basis_set, dftb_parameter=dftb_parameter)
375 IF (
ASSOCIATED(orb_basis_set))
THEN
380 nset_info(iatom) = nset
382 nshell_info(iset, iatom) = nshell(iset)
383 DO ishell = 1, nshell(iset)
384 lshell = l(ishell, iset)
385 nso_info(ishell, iset, iatom) =
nso(lshell)
388 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
391 nshell_info(1, iatom) = lmax + 1
392 DO ishell = 1, lmax + 1
394 nso_info(ishell, 1, iatom) =
nso(lshell)
402 WRITE (ires) natom, nspin, nao, nset_max, nshell_max
403 WRITE (ires) nset_info
404 WRITE (ires) nshell_info
405 WRITE (ires) nso_info
407 DEALLOCATE (nset_info)
409 DEALLOCATE (nshell_info)
411 DEALLOCATE (nso_info)
417 mo_coeff => mo_array(ispin)%mo_coeff
418 nmo = mo_array(ispin)%nmo
420 mo_eigenvalues => mo_array(ispin)%eigenvalues
421 mo_occupation_numbers => mo_array(ispin)%occupation_numbers
422 IF (
PRESENT(matrix_ks))
THEN
425 ks_matrix=matrix_ks(ispin)%matrix, &
426 evals_arg=mo_eigenvalues)
430 mo_array(ispin)%homo, &
431 mo_array(ispin)%lfomo, &
432 mo_array(ispin)%nelectron
433 WRITE (ires) mo_eigenvalues(1:nmo), mo_occupation_numbers(1:nmo)
436 IF (
PRESENT(rt_mos))
THEN
437 DO imat = 2*ispin - 1, 2*ispin
445 CALL timestop(handle)
460 CHARACTER(LEN=default_path_length),
INTENT(OUT) :: filename
461 LOGICAL,
INTENT(OUT) :: exist
464 LOGICAL,
INTENT(IN),
OPTIONAL :: kp, xas, rtp
467 LOGICAL :: my_kp, my_rtp, my_xas
473 IF (
PRESENT(kp)) my_kp = kp
474 IF (
PRESENT(xas)) my_xas = xas
475 IF (
PRESENT(rtp)) my_rtp = rtp
479 IF (n_rep_val > 0)
THEN
486 extension=
"", my_local=.false.)
487 ELSE IF (my_rtp)
THEN
491 extension=
".rtpwfn", my_local=.false.)
496 extension=
".kp", my_local=.false.)
501 extension=
".wfn", my_local=.false.)
504 IF (.NOT. my_xas)
THEN
505 INQUIRE (file=filename, exist=exist)
524 para_env, id_nr, multiplicity, dft_section, natom_mismatch, &
527 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(INOUT) :: mo_array
528 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
531 INTEGER,
INTENT(IN) :: id_nr, multiplicity
533 LOGICAL,
INTENT(OUT),
OPTIONAL :: natom_mismatch
534 LOGICAL,
INTENT(IN),
OPTIONAL :: cdft
535 INTEGER,
INTENT(IN),
OPTIONAL :: out_unit
537 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_mo_set_from_restart'
539 CHARACTER(LEN=default_path_length) :: file_name
540 INTEGER :: handle, ispin, my_out_unit, natom, &
542 LOGICAL :: exist, my_cdft
545 CALL timeset(routinen, handle)
548 IF (
PRESENT(cdft)) my_cdft = cdft
550 IF (
PRESENT(out_unit)) my_out_unit = out_unit
552 nspin =
SIZE(mo_array)
555 IF (para_env%is_source())
THEN
557 natom =
SIZE(particle_set, 1)
561 file_name = trim(file_name)//
".bak-"//adjustl(
cp_to_string(id_nr))
565 file_action=
"READ", &
566 file_form=
"UNFORMATTED", &
568 unit_number=restart_unit)
573 particle_set=particle_set, natom=natom, &
574 rst_unit=restart_unit, multiplicity=multiplicity, natom_mismatch=natom_mismatch)
576 IF (
PRESENT(natom_mismatch))
THEN
578 CALL para_env%bcast(natom_mismatch)
579 IF (natom_mismatch)
THEN
580 IF (para_env%is_source())
CALL close_file(unit_number=restart_unit)
581 CALL timestop(handle)
587 IF (para_env%is_source())
THEN
588 IF (my_out_unit > 0)
THEN
589 WRITE (unit=my_out_unit, fmt=
"(T2,A)") &
590 "WFN_RESTART| Restart file "//trim(file_name)//
" read"
596 IF (.NOT. my_cdft)
THEN
599 dft_section, 4, 0, final_mos=.false.)
603 CALL timestop(handle)
620 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(INOUT) :: mo_array
621 TYPE(
cp_fm_type),
DIMENSION(:),
POINTER :: rt_mos
622 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
625 INTEGER,
INTENT(IN) :: id_nr, multiplicity
628 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_rt_mos_from_restart'
630 CHARACTER(LEN=default_path_length) :: file_name
631 INTEGER :: handle, ispin, natom, nspin, &
632 restart_unit, unit_nr
636 CALL timeset(routinen, handle)
639 nspin =
SIZE(mo_array)
642 IF (para_env%is_source())
THEN
644 natom =
SIZE(particle_set, 1)
648 file_name = trim(file_name)//
".bak-"//adjustl(
cp_to_string(id_nr))
652 IF (unit_nr > 0)
THEN
653 WRITE (unit_nr,
'(T2,A)')
"Read RTP restart from the file: "//trim(file_name)
657 file_action=
"READ", &
658 file_form=
"UNFORMATTED", &
660 unit_number=restart_unit)
665 particle_set=particle_set, qs_kind_set=qs_kind_set, natom=natom, &
666 rst_unit=restart_unit, multiplicity=multiplicity)
669 IF (para_env%is_source())
CALL close_file(unit_number=restart_unit)
673 dft_section, 4, 0, final_mos=.false.)
676 CALL timestop(handle)
696 multiplicity, rt_mos, natom_mismatch)
698 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(INOUT) :: mos
700 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
702 INTEGER,
INTENT(IN) :: natom, rst_unit
703 INTEGER,
INTENT(in),
OPTIONAL :: multiplicity
704 TYPE(
cp_fm_type),
DIMENSION(:),
OPTIONAL,
POINTER :: rt_mos
705 LOGICAL,
INTENT(OUT),
OPTIONAL :: natom_mismatch
707 INTEGER :: homo, homo_read, i, iatom, ikind, imat, irow, iset, iset_read, ishell, &
708 ishell_read, iso, ispin, lfomo_read, lmax, lshell, my_mult, nao, nao_read, natom_read, &
709 nelectron, nelectron_read, nmo, nmo_read, nnshell, nset, nset_max, nshell_max, nspin, &
710 nspin_read, offset_read
711 INTEGER,
DIMENSION(:),
POINTER :: nset_info, nshell
712 INTEGER,
DIMENSION(:, :),
POINTER :: l, nshell_info
713 INTEGER,
DIMENSION(:, :, :),
POINTER :: nso_info, offset_info
714 LOGICAL :: minbas, natom_match, use_this
715 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eig_read, occ_read
716 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: vecbuffer, vecbuffer_read
726 IF (
PRESENT(multiplicity)) my_mult = multiplicity
728 IF (para_env%is_source())
THEN
729 READ (rst_unit) natom_read, nspin_read, nao_read, nset_max, nshell_max
730 IF (
PRESENT(rt_mos))
THEN
731 IF (nspin_read /= nspin)
THEN
732 cpabort(
"To change nspin is not possible. ")
736 IF (nspin_read /= nspin)
THEN
738 "READ RESTART : WARNING : nspin is not equal "
741 IF (nspin_read > nspin)
THEN
742 cpabort(
"Reducing nspin is not possible. ")
746 natom_match = (natom_read == natom)
748 IF (natom_match)
THEN
751 ALLOCATE (nso_info(nshell_max, nset_max, natom_read))
752 ALLOCATE (nshell_info(nset_max, natom_read))
753 ALLOCATE (nset_info(natom_read))
754 ALLOCATE (offset_info(nshell_max, nset_max, natom_read))
756 IF (nao_read /= nao)
THEN
758 " READ RESTART : WARNING : DIFFERENT # AOs ", nao, nao_read
759 IF (
PRESENT(rt_mos))
THEN
760 cpabort(
"To change basis is not possible. ")
764 READ (rst_unit) nset_info
765 READ (rst_unit) nshell_info
766 READ (rst_unit) nso_info
770 DO iset = 1, nset_info(iatom)
771 DO ishell = 1, nshell_info(iset, iatom)
772 offset_info(ishell, iset, iatom) = i
773 i = i + nso_info(ishell, iset, iatom)
778 ALLOCATE (vecbuffer_read(1, nao_read))
784 CALL para_env%bcast(natom_match)
785 IF (
PRESENT(natom_mismatch)) natom_mismatch = .NOT. natom_match
787 IF (.NOT. natom_match)
THEN
788 IF (
PRESENT(natom_mismatch))
THEN
790 " READ RESTART : WARNING : DIFFERENT natom, returning ", natom, natom_read
793 cpabort(
"Incorrect number of atoms in restart file. ")
797 CALL para_env%bcast(nspin_read)
799 ALLOCATE (vecbuffer(1, nao))
804 homo = mos(ispin)%homo
805 mos(ispin)%eigenvalues(:) = 0.0_dp
806 mos(ispin)%occupation_numbers(:) = 0.0_dp
809 IF (para_env%is_source() .AND. (nmo > 0))
THEN
810 READ (rst_unit) nmo_read, homo_read, lfomo_read, nelectron_read
811 ALLOCATE (eig_read(nmo_read), occ_read(nmo_read))
815 nmo = min(nmo, nmo_read)
816 IF (nmo_read < nmo)
THEN
817 CALL cp_warn(__location__, &
818 "The number of MOs on the restart unit is smaller than the number of "// &
819 "the allocated MOs. The MO set will be padded with zeros!")
821 IF (nmo_read > nmo)
THEN
822 CALL cp_warn(__location__, &
823 "The number of MOs on the restart unit is greater than the number of "// &
824 "the allocated MOs. The read MO set will be truncated!")
827 READ (rst_unit) eig_read(1:nmo_read), occ_read(1:nmo_read)
828 mos(ispin)%eigenvalues(1:nmo) = eig_read(1:nmo)
829 mos(ispin)%occupation_numbers(1:nmo) = occ_read(1:nmo)
830 DEALLOCATE (eig_read, occ_read)
832 mos(ispin)%homo = homo_read
833 mos(ispin)%lfomo = lfomo_read
834 IF (min(homo_read, homo) > nmo)
THEN
835 IF (nelectron_read == mos(ispin)%nelectron)
THEN
836 CALL cp_warn(__location__, &
837 "The number of occupied MOs on the restart unit is larger than "// &
838 "the allocated MOs. The read MO set will be truncated and the occupation numbers recalculated!")
843 cpabort(
"Number of occupied MOs on restart unit larger than allocated MOs. ")
848 CALL para_env%bcast(nmo)
849 CALL para_env%bcast(mos(ispin)%homo)
850 CALL para_env%bcast(mos(ispin)%lfomo)
851 CALL para_env%bcast(mos(ispin)%nelectron)
852 CALL para_env%bcast(mos(ispin)%eigenvalues)
853 CALL para_env%bcast(mos(ispin)%occupation_numbers)
855 IF (
PRESENT(rt_mos))
THEN
856 DO imat = 2*ispin - 1, 2*ispin
858 IF (para_env%is_source())
THEN
859 READ (rst_unit) vecbuffer
861 vecbuffer(1, :) = 0.0_dp
863 CALL para_env%bcast(vecbuffer)
865 vecbuffer, 1, i, nao, 1, transpose=.true.)
870 IF (para_env%is_source())
THEN
871 READ (rst_unit) vecbuffer_read
876 NULLIFY (orb_basis_set, dftb_parameter, l, nshell)
877 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
879 basis_set=orb_basis_set, dftb_parameter=dftb_parameter)
880 IF (
ASSOCIATED(orb_basis_set))
THEN
886 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
903 nnshell = nshell(iset)
905 DO ishell = 1, nnshell
909 lshell = l(ishell, iset)
911 IF (iset_read > nset_info(iatom)) use_this = .false.
913 IF (
nso(lshell) == nso_info(ishell_read, iset_read, iatom))
THEN
914 offset_read = offset_info(ishell_read, iset_read, iatom)
915 ishell_read = ishell_read + 1
916 IF (ishell_read > nshell_info(iset, iatom))
THEN
918 iset_read = iset_read + 1
924 DO iso = 1,
nso(lshell)
926 IF (offset_read - 1 + iso < 1 .OR. offset_read - 1 + iso > nao_read)
THEN
927 vecbuffer(1, irow) = 0.0_dp
929 vecbuffer(1, irow) = vecbuffer_read(1, offset_read - 1 + iso)
932 vecbuffer(1, irow) = 0.0_dp
943 vecbuffer(1, :) = 0.0_dp
947 CALL para_env%bcast(vecbuffer)
949 vecbuffer, 1, i, nao, 1, transpose=.true.)
953 IF (para_env%is_source())
THEN
956 DO i = nmo + 1, nmo_read
957 READ (rst_unit) vecbuffer_read
962 IF (.NOT.
PRESENT(rt_mos))
THEN
963 IF (ispin == 1 .AND. nspin_read < nspin)
THEN
965 mos(ispin + 1)%homo = mos(ispin)%homo
966 mos(ispin + 1)%lfomo = mos(ispin)%lfomo
967 nelectron = mos(ispin)%nelectron
968 IF (my_mult /= 1)
THEN
969 CALL cp_abort(__location__, &
970 "Restarting an LSD calculation from an LDA wfn only works for multiplicity=1 (singlets).")
972 IF (mos(ispin + 1)%nelectron < 0)
THEN
973 cpabort(
"LSD: too few electrons for this multiplisity. ")
975 mos(ispin + 1)%eigenvalues = mos(ispin)%eigenvalues
976 mos(ispin)%occupation_numbers = mos(ispin)%occupation_numbers/2.0_dp
977 mos(ispin + 1)%occupation_numbers = mos(ispin)%occupation_numbers
978 CALL cp_fm_to_fm(mos(ispin)%mo_coeff, mos(ispin + 1)%mo_coeff)
984 DEALLOCATE (vecbuffer)
986 IF (para_env%is_source())
THEN
987 DEALLOCATE (vecbuffer_read)
988 DEALLOCATE (offset_info)
989 DEALLOCATE (nso_info)
990 DEALLOCATE (nshell_info)
991 DEALLOCATE (nset_info)
1024 dft_section, before, kpoint, final_mos, spin, &
1025 solver_method, rtp, cpart, sim_step, umo_set, qs_env, &
1029 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1032 INTEGER,
INTENT(IN) :: before, kpoint
1033 LOGICAL,
INTENT(IN),
OPTIONAL :: final_mos
1034 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: spin
1035 CHARACTER(LEN=2),
INTENT(IN),
OPTIONAL :: solver_method
1036 LOGICAL,
INTENT(IN),
OPTIONAL :: rtp
1037 INTEGER,
INTENT(IN),
OPTIONAL :: cpart, sim_step
1038 TYPE(
mo_set_type),
INTENT(IN),
OPTIONAL :: umo_set
1042 CHARACTER(LEN=12) :: symbol
1043 CHARACTER(LEN=12),
DIMENSION(:),
POINTER :: bcgf_symbol
1044 CHARACTER(LEN=14) :: fmtstr5
1045 CHARACTER(LEN=15) :: energy_str, orbital_str, step_string
1046 CHARACTER(LEN=2) :: element_symbol, my_solver_method
1047 CHARACTER(LEN=2*default_string_length) :: name
1048 CHARACTER(LEN=21) :: vector_str
1049 CHARACTER(LEN=22) :: fmtstr4
1050 CHARACTER(LEN=24) :: fmtstr2
1051 CHARACTER(LEN=25) :: fmtstr1
1052 CHARACTER(LEN=29) :: fmtstr6
1053 CHARACTER(LEN=4) :: reim
1054 CHARACTER(LEN=40) :: fmtstr3
1055 CHARACTER(LEN=6),
DIMENSION(:),
POINTER :: bsgf_symbol
1056 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: cmo_coeff_buf
1057 INTEGER :: after, first_mo, from, homo, iatom, icgf, ico, icol, ikind, imo, irow, iset, &
1058 isgf, ishell, iso, iw, jcol, last_mo, left, lmax, lshell, nao, natom, ncgf, ncol, nkind, &
1059 nmo, nmo_local, nset, nsgf, numo, right, scf_step, to, width
1060 INTEGER,
DIMENSION(:),
POINTER :: mo_index_range, nshell
1061 INTEGER,
DIMENSION(:, :),
POINTER :: l
1062 LOGICAL :: ionode, my_final, my_rtp, omit_headers, print_cartesian, print_cartesian_overlap, &
1063 print_eigvals, print_eigvecs, print_occup, should_output
1064 REAL(kind=
dp) :: chemical_potential, gap, maxocc
1065 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: mo_eigenvalues, mo_occupation_numbers
1066 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: cmatrix, smatrix
1067 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues, occupation_numbers
1069 TYPE(
cp_fm_type),
POINTER :: mo_coeff, umo_coeff
1081 NULLIFY (bcgf_symbol)
1082 NULLIFY (bsgf_symbol)
1084 NULLIFY (mo_index_range)
1090 ionode = logger%para_env%is_source()
1097 CALL section_vals_val_get(dft_section,
"PRINT%MO%CARTESIAN_OVERLAP", l_val=print_cartesian_overlap)
1098 after = min(max(after, 1), 16)
1101 IF (
PRESENT(final_mos))
THEN
1102 my_final = final_mos
1109 IF (
PRESENT(rtp))
THEN
1114 .OR. (sim_step == 1)
1120 IF ((.NOT. should_output) .OR. (.NOT. (print_eigvals .OR. print_eigvecs .OR. print_occup)))
RETURN
1123 cpassert(
PRESENT(sim_step))
1124 cpassert(
PRESENT(cpart))
1126 IF (cpart == 0)
THEN
1131 print_eigvals = .false.
1133 scf_step = max(0, logger%iter_info%iteration(logger%iter_info%n_rlevel) - 1)
1136 IF (.NOT. my_final)
THEN
1137 IF (.NOT. my_rtp)
THEN
1138 step_string =
" AFTER SCF STEP"
1140 step_string =
" AFTER RTP STEP"
1144 IF (
PRESENT(solver_method))
THEN
1145 my_solver_method = solver_method
1148 my_solver_method =
"TD"
1152 IF (
PRESENT(para_env_inter_kp))
THEN
1153 cpassert(
ASSOCIATED(para_env_inter_kp))
1154 cpassert(.NOT.
PRESENT(umo_set))
1158 chemical_potential = 0.0_dp
1159 NULLIFY (cmo_coeff, eigenvalues, occupation_numbers, mo_coeff)
1160 IF (
PRESENT(mo_set))
THEN
1161 CALL get_mo_set(mo_set=mo_set, eigenvalues=eigenvalues, &
1162 occupation_numbers=occupation_numbers, mo_coeff=mo_coeff, &
1163 homo=homo, maxocc=maxocc, mu=chemical_potential, nmo=nmo_local, &
1164 cmo_coeff=cmo_coeff)
1167 CALL para_env_inter_kp%max(nmo)
1168 CALL para_env_inter_kp%sum(homo)
1169 CALL para_env_inter_kp%sum(maxocc)
1170 CALL para_env_inter_kp%sum(chemical_potential)
1171 ALLOCATE (mo_eigenvalues(nmo), mo_occupation_numbers(nmo))
1172 mo_eigenvalues = 0.0_dp
1173 mo_occupation_numbers = 0.0_dp
1174 IF (nmo_local > 0 .AND.
PRESENT(mo_set))
THEN
1175 mo_eigenvalues(1:nmo_local) = eigenvalues(1:nmo_local)
1176 mo_occupation_numbers(1:nmo_local) = occupation_numbers(1:nmo_local)
1178 CALL para_env_inter_kp%sum(mo_eigenvalues)
1179 CALL para_env_inter_kp%sum(mo_occupation_numbers)
1180 IF (print_eigvecs)
THEN
1182 ALLOCATE (smatrix(nao, nmo))
1184 IF (nmo_local > 0 .AND.
PRESENT(mo_set))
THEN
1185 IF (
ASSOCIATED(cmo_coeff))
THEN
1186 ALLOCATE (cmo_coeff_buf(nao, nmo_local))
1189 smatrix(:, 1:nmo_local) = real(cmo_coeff_buf, kind=
dp)
1190 DEALLOCATE (cmo_coeff_buf)
1195 CALL para_env_inter_kp%sum(smatrix)
1199 cpassert(
PRESENT(mo_set))
1201 mo_coeff=mo_coeff, &
1202 eigenvalues=eigenvalues, &
1203 occupation_numbers=occupation_numbers, &
1208 mu=chemical_potential)
1209 IF (
PRESENT(umo_set))
THEN
1211 mo_coeff=umo_coeff, &
1217 ALLOCATE (mo_eigenvalues(nmo), mo_occupation_numbers(nmo))
1218 mo_eigenvalues(1:nmo - numo) = eigenvalues(1:nmo - numo)
1219 mo_occupation_numbers = 0.0_dp
1220 mo_occupation_numbers(1:nmo - numo) = occupation_numbers(1:nmo - numo)
1222 CALL get_mo_set(mo_set=umo_set, eigenvalues=eigenvalues)
1223 mo_eigenvalues(nmo - numo + 1:nmo) = eigenvalues(1:numo)
1227 IF (print_eigvecs)
THEN
1228 IF (.NOT.
ALLOCATED(smatrix))
THEN
1229 ALLOCATE (smatrix(nao, nmo))
1235 IF (.NOT. ionode)
THEN
1236 DEALLOCATE (smatrix)
1240 IF (
PRESENT(qs_env))
THEN
1241 IF (
ASSOCIATED(qs_env) .AND. my_final .AND. print_cartesian_overlap)
THEN
1242 NULLIFY (qs_kind_set)
1243 CALL get_qs_env(qs_env=qs_env, qs_kind_set=qs_kind_set)
1244 nkind =
SIZE(qs_kind_set)
1247 qs_env%input,
"DFT%PRINT%AO_MATRICES/OVERLAP"),
cp_p_file))
THEN
1248 ALLOCATE (orb_basis_set_list(nkind))
1250 qs_kind => qs_kind_set(ikind)
1251 NULLIFY (orb_basis_set_list(ikind)%gto_basis_set)
1253 CALL get_qs_kind(qs_kind=qs_kind, basis_set=orbbasis, basis_type=
"ORB")
1254 IF (
ASSOCIATED(orbbasis)) orb_basis_set_list(ikind)%gto_basis_set => orbbasis
1260 CALL get_qs_env(qs_env, ks_env=ks_env, para_env=para_env)
1262 orb_basis_set_list, orb_basis_set_list, sro_list, .true.)
1267 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1269 after = min(max(after, 1), 16)
1270 IF (
ASSOCIATED(sro))
THEN
1272 output_unit=iw, omit_headers=omit_headers, &
1273 cartesian_basis=.true.)
1276 "DFT%PRINT%AO_MATRICES/OVERLAP")
1278 DEALLOCATE (orb_basis_set_list)
1284 ignore_should_output=should_output, &
1289 natom =
SIZE(particle_set)
1294 fmtstr1 =
"(T2,A,21X, ( X,I5, X))"
1295 fmtstr2 =
"(T2,A,21X, (1X,F . ))"
1296 fmtstr3 =
"(T2,A,I5,1X,I5,1X,A,1X,A6, (1X,F . ))"
1298 width = before + after + 3
1299 ncol = int(56/width)
1301 right = max((after - 2), 1)
1302 left = width - right - 5
1304 WRITE (unit=fmtstr1(11:12), fmt=
"(I2)") ncol
1305 WRITE (unit=fmtstr1(14:15), fmt=
"(I2)") left
1306 WRITE (unit=fmtstr1(21:22), fmt=
"(I2)") right
1308 WRITE (unit=fmtstr2(11:12), fmt=
"(I2)") ncol
1309 WRITE (unit=fmtstr2(18:19), fmt=
"(I2)") width - 1
1310 WRITE (unit=fmtstr2(21:22), fmt=
"(I2)") after
1312 WRITE (unit=fmtstr3(27:28), fmt=
"(I2)") ncol
1313 WRITE (unit=fmtstr3(34:35), fmt=
"(I2)") width - 1
1314 WRITE (unit=fmtstr3(37:38), fmt=
"(I2)") after
1316 IF (my_final .OR. (my_solver_method ==
"TD"))
THEN
1317 energy_str =
"EIGENVALUES"
1318 vector_str =
"EIGENVECTORS"
1320 energy_str =
"ENERGIES"
1321 vector_str =
"COEFFICIENTS"
1325 energy_str =
"ZEROS"
1326 vector_str = trim(reim)//
" RTP COEFFICIENTS"
1329 IF (print_eigvecs)
THEN
1331 IF (print_cartesian)
THEN
1333 orbital_str =
"CARTESIAN"
1335 ALLOCATE (cmatrix(ncgf, ncgf))
1342 NULLIFY (orb_basis_set, dftb_parameter)
1343 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
1345 basis_set=orb_basis_set, &
1346 dftb_parameter=dftb_parameter)
1347 IF (
ASSOCIATED(orb_basis_set))
THEN
1353 DO ishell = 1, nshell(iset)
1354 lshell = l(ishell, iset)
1355 CALL dgemm(
"T",
"N",
nco(lshell), nmo,
nso(lshell), 1.0_dp, &
1357 smatrix(isgf, 1), nsgf, 0.0_dp, &
1358 cmatrix(icgf, 1), ncgf)
1359 icgf = icgf +
nco(lshell)
1360 isgf = isgf +
nso(lshell)
1363 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1365 DO ishell = 1, lmax + 1
1367 CALL dgemm(
"T",
"N",
nco(lshell), nsgf,
nso(lshell), 1.0_dp, &
1369 smatrix(isgf, 1), nsgf, 0.0_dp, &
1370 cmatrix(icgf, 1), ncgf)
1371 icgf = icgf +
nco(lshell)
1372 isgf = isgf +
nso(lshell)
1382 orbital_str =
"SPHERICAL"
1386 name = trim(energy_str)//
", OCCUPATION NUMBERS, AND "// &
1387 trim(orbital_str)//
" "//trim(vector_str)
1389 IF (.NOT. my_final)
THEN
1390 WRITE (unit=name, fmt=
"(A,1X,I0)") trim(name)//step_string, scf_step
1393 ELSE IF (print_occup .OR. print_eigvals)
THEN
1394 name = trim(energy_str)//
" AND OCCUPATION NUMBERS"
1396 IF (.NOT. my_final)
THEN
1397 WRITE (unit=name, fmt=
"(A,1X,I0)") trim(name)//step_string, scf_step
1402 IF (
PRESENT(spin) .AND. (kpoint > 0))
THEN
1403 WRITE (unit=iw, fmt=
"(/,T2,A,I0)") &
1404 "MO| "//trim(spin)//
" "//trim(name)//
" FOR K POINT ", kpoint
1405 ELSE IF (
PRESENT(spin))
THEN
1406 WRITE (unit=iw, fmt=
"(/,T2,A)") &
1407 "MO| "//trim(spin)//
" "//trim(name)
1408 ELSE IF (kpoint > 0)
THEN
1409 WRITE (unit=iw, fmt=
"(/,T2,A,I0)") &
1410 "MO| "//trim(name)//
" FOR K POINT ", kpoint
1412 WRITE (unit=iw, fmt=
"(/,T2,A)") &
1417 IF (all(mo_index_range > 0))
THEN
1418 IF (mo_index_range(2) > nmo)
THEN
1419 CALL cp_warn(__location__, &
1420 "The last orbital index is larger than the number of orbitals.")
1422 IF (mo_index_range(1) > mo_index_range(2))
THEN
1423 CALL cp_warn(__location__, &
1424 "The first orbital index is larger than the last orbital index.")
1426 first_mo = min(max(1, mo_index_range(1)), nmo)
1427 last_mo = min(max(first_mo, mo_index_range(2)), nmo)
1428 ELSE IF (mo_index_range(2) < 0)
THEN
1429 IF (mo_index_range(1) > nmo)
THEN
1430 CALL cp_warn(__location__, &
1431 "The first orbital index is larger than the number of orbitals.")
1433 first_mo = min(max(1, mo_index_range(1)), nmo)
1440 IF (print_eigvecs)
THEN
1444 DO icol = first_mo, last_mo, ncol
1447 to = min((from + ncol - 1), last_mo)
1449 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1450 WRITE (unit=iw, fmt=fmtstr1) &
1451 "MO|", (jcol, jcol=from, to)
1452 WRITE (unit=iw, fmt=fmtstr2) &
1453 "MO|", (mo_eigenvalues(jcol), jcol=from, to)
1454 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1455 WRITE (unit=iw, fmt=fmtstr2) &
1456 "MO|", (mo_occupation_numbers(jcol), jcol=from, to)
1457 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1463 IF (iatom /= 1)
WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1465 NULLIFY (orb_basis_set, dftb_parameter)
1467 element_symbol=element_symbol, kind_number=ikind)
1469 basis_set=orb_basis_set, &
1470 dftb_parameter=dftb_parameter)
1472 IF (print_cartesian)
THEN
1474 IF (
ASSOCIATED(orb_basis_set))
THEN
1483 DO ishell = 1, nshell(iset)
1484 lshell = l(ishell, iset)
1485 DO ico = 1,
nco(lshell)
1486 WRITE (unit=iw, fmt=fmtstr3) &
1487 "MO|", irow, iatom, adjustr(element_symbol), bcgf_symbol(icgf), &
1488 (cmatrix(irow, jcol), jcol=from, to)
1494 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1497 DO ishell = 1, lmax + 1
1499 DO ico = 1,
nco(lshell)
1502 WRITE (unit=iw, fmt=fmtstr3) &
1503 "MO|", irow, iatom, adjustr(element_symbol), symbol, &
1504 (cmatrix(irow, jcol), jcol=from, to)
1516 IF (
ASSOCIATED(orb_basis_set))
THEN
1524 DO ishell = 1, nshell(iset)
1525 lshell = l(ishell, iset)
1526 DO iso = 1,
nso(lshell)
1527 WRITE (unit=iw, fmt=fmtstr3) &
1528 "MO|", irow, iatom, adjustr(element_symbol), bsgf_symbol(isgf), &
1529 (smatrix(irow, jcol), jcol=from, to)
1535 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1538 DO ishell = 1, lmax + 1
1540 DO iso = 1,
nso(lshell)
1541 symbol =
sgf_symbol(1, lshell, -lshell + iso - 1)
1543 WRITE (unit=iw, fmt=fmtstr3) &
1544 "MO|", irow, iatom, adjustr(element_symbol), symbol, &
1545 (smatrix(irow, jcol), jcol=from, to)
1561 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1565 IF (print_cartesian)
THEN
1566 DEALLOCATE (cmatrix)
1568 DEALLOCATE (smatrix)
1570 ELSE IF (print_occup .OR. print_eigvals)
THEN
1572 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1573 fmtstr4 =
"(T2,A,I7,3(1X,F22. ))"
1574 WRITE (unit=fmtstr4(19:20), fmt=
"(I2)") after
1575 IF (my_final .OR. (my_solver_method ==
"TD"))
THEN
1576 WRITE (unit=iw, fmt=
"(A)") &
1577 " MO| Index Eigenvalue [a.u.] Eigenvalue [eV] Occupation"
1579 WRITE (unit=iw, fmt=
"(A)") &
1580 " MO| Index Energy [a.u.] Energy [eV] Occupation"
1582 DO imo = first_mo, last_mo
1583 WRITE (unit=iw, fmt=fmtstr4) &
1584 "MO|", imo, mo_eigenvalues(imo), &
1585 mo_eigenvalues(imo)*
evolt, &
1586 mo_occupation_numbers(imo)
1588 fmtstr5 =
"(A,T59,F22. )"
1589 WRITE (unit=fmtstr5(12:13), fmt=
"(I2)") after
1590 WRITE (unit=iw, fmt=fmtstr5) &
1595 IF (.NOT. my_rtp)
THEN
1596 fmtstr6 =
"(A,T18,F17. ,A,T41,F17. ,A)"
1597 WRITE (unit=fmtstr6(12:13), fmt=
"(I2)") after
1598 WRITE (unit=fmtstr6(25:26), fmt=
"(I2)") after
1599 WRITE (unit=iw, fmt=fmtstr6) &
1600 " MO| E(Fermi):", chemical_potential,
" a.u.", chemical_potential*
evolt,
" eV"
1602 IF ((homo > 0) .AND. .NOT. my_rtp)
THEN
1603 IF ((mo_occupation_numbers(homo) == maxocc) .AND. (last_mo > homo))
THEN
1604 gap = mo_eigenvalues(homo + 1) - &
1605 mo_eigenvalues(homo)
1606 WRITE (unit=iw, fmt=fmtstr6) &
1607 " MO| Band gap:", gap,
" a.u.", gap*
evolt,
" eV"
1610 WRITE (unit=iw, fmt=
"(A)")
""
1614 IF (
ALLOCATED(mo_eigenvalues))
DEALLOCATE (mo_eigenvalues)
1615 IF (
ALLOCATED(mo_occupation_numbers))
DEALLOCATE (mo_occupation_numbers)
1618 ignore_should_output=should_output)
static void dgemm(const char transa, const char transb, const int m, const int n, const int k, const double alpha, const double *a, const int lda, const double *b, const int ldb, const double beta, double *c, const int ldc)
Convenient wrapper to hide Fortran nature of dgemm_, swapping a and b.
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius, npgf_seg_sum, ccon)
...
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
Extract a sub-matrix from the full matrix: op(target_m)(1:n_rows,1:n_cols) = fm(start_row:start_row+n...
subroutine, public dbcsr_binary_write(matrix, filepath)
...
subroutine, public dbcsr_release(matrix)
...
real(kind=dp) function, public dbcsr_checksum(matrix, pos)
Calculates the checksum of a DBCSR matrix.
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm, plan, check_plan)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
subroutine, public cp_dbcsr_write_sparse_matrix(sparse_matrix, before, after, qs_env, para_env, first_row, last_row, first_col, last_col, scale, output_unit, omit_headers, cartesian_basis)
...
Utility routines to open and close files.
subroutine, public open_file(file_name, unit_number, file_status, file_form, file_action, file_position, file_pad, file_access, debug)
Opens a file and returns its logical unit number.
subroutine, public close_file(unit_number, file_status)
Closes an open file given by its logical unit number.
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_write_unformatted(fm, unit)
...
subroutine, public cp_fm_set_submatrix(fm, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
sets a submatrix of a full matrix fm(start_row:start_row+n_rows,start_col:start_col+n_cols) = alpha*o...
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_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
gets a submatrix of a full matrix op(target_m)(1:n_rows,1:n_cols) =fm(start_row:start_row+n_rows,...
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
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_path_length) function, public cp_print_key_generate_filename(logger, print_key, middle_name, extension, my_local)
Utility function that returns a unit number to write the print key. Might open a file with a unique f...
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...
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, file_access)
...
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_string_length
integer, parameter, public default_path_length
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nco
integer, dimension(:, :), allocatable, public indco
integer, dimension(:), allocatable, public nso
character(len=12) function, public cgf_symbol(n, lxyz)
Build a Cartesian orbital symbol (orbital labels for printing).
character(len=6) function, public sgf_symbol(n, l, m)
Build a spherical orbital symbol (orbital labels for printing).
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public evolt
collects routines that calculate density matrices
Definition of the DFTB parameter types.
Working with the DFTB parameter types.
subroutine, public get_dftb_atom_param(dftb_parameter, name, typ, defined, z, zeff, natorb, lmax, skself, occupation, eta, energy, cutoff, xi, di, rcdisp, dudq)
...
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, matrix_vhxc, 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(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, hund_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, proj_shell_charge, lr_atom, do_mtlr, u_j_loop, ao_coef, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
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, do_mtlr_present, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
Definition and initialisation of the mo data type.
subroutine, public wfn_restart_file_name(filename, exist, section, logger, kp, xas, rtp)
...
subroutine, public read_mo_set_from_restart(mo_array, qs_kind_set, particle_set, para_env, id_nr, multiplicity, dft_section, natom_mismatch, cdft, out_unit)
...
subroutine, public read_rt_mos_from_restart(mo_array, rt_mos, qs_kind_set, particle_set, para_env, id_nr, multiplicity, dft_section)
...
subroutine, public write_dm_binary_restart(mo_array, dft_section, tmpl_matrix)
calculates density matrix from mo set and writes the density matrix into a binary restart file
subroutine, public write_mo_set_low(mo_array, qs_kind_set, particle_set, ires, rt_mos, matrix_ks)
...
subroutine, public read_mos_restart_low(mos, para_env, qs_kind_set, particle_set, natom, rst_unit, multiplicity, rt_mos, natom_mismatch)
Reading the mos from apreviously defined restart file.
subroutine, public write_mo_set_to_output_unit(mo_set, qs_kind_set, particle_set, dft_section, before, kpoint, final_mos, spin, solver_method, rtp, cpart, sim_step, umo_set, qs_env, para_env_inter_kp)
Write MO information to output file (eigenvalues, occupation numbers, coefficients).
subroutine, public write_mo_set_to_restart(mo_array, particle_set, dft_section, qs_kind_set, matrix_ks)
...
subroutine, public write_rt_mos_to_restart(mo_array, rt_mos, particle_set, dft_section, qs_kind_set)
...
collects routines that perform operations directly related to MOs
Set occupation of molecular orbitals.
Definition and initialisation of the mo data type.
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count, cmo_coeff)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
subroutine, public release_neighbor_list_sets(nlists)
releases an array of neighbor_list_sets
Generate the atomic neighbor lists.
subroutine, public setup_neighbor_list(ab_list, basis_set_a, basis_set_b, qs_env, mic, symmetric, molecular, operator_type)
Build a neighborlist.
Calculation of overlap matrix, its derivatives and forces.
subroutine, public build_overlap_matrix_simple(ks_env, matrix_s, basis_set_list_a, basis_set_list_b, sab_nl, lcart)
Calculation of the overlap matrix over Cartesian Gaussian functions.
Represent a complex full matrix.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...