88#include "./base/base_uses.f90"
94 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_mo_io'
118 TYPE(
mo_set_type),
DIMENSION(:),
INTENT(IN) :: mo_array
121 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
125 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_mo_set_to_restart'
126 CHARACTER(LEN=30),
DIMENSION(2),
PARAMETER :: &
127 keys = [
"SCF%PRINT%RESTART_HISTORY",
"SCF%PRINT%RESTART "]
129 INTEGER :: handle, ikey, ires, ispin
132 CALL timeset(routinen, handle)
141 IF (mo_array(1)%use_mo_coeff_b)
THEN
144 DO ispin = 1,
SIZE(mo_array)
145 IF (.NOT.
ASSOCIATED(mo_array(ispin)%mo_coeff_b))
THEN
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 ELSEIF (
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 ELSEIF (
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)) &
760 cpabort(
"To change basis is not possible. ")
763 READ (rst_unit) nset_info
764 READ (rst_unit) nshell_info
765 READ (rst_unit) nso_info
769 DO iset = 1, nset_info(iatom)
770 DO ishell = 1, nshell_info(iset, iatom)
771 offset_info(ishell, iset, iatom) = i
772 i = i + nso_info(ishell, iset, iatom)
777 ALLOCATE (vecbuffer_read(1, nao_read))
783 CALL para_env%bcast(natom_match)
784 IF (
PRESENT(natom_mismatch)) natom_mismatch = .NOT. natom_match
786 IF (.NOT. natom_match)
THEN
787 IF (
PRESENT(natom_mismatch))
THEN
789 " READ RESTART : WARNING : DIFFERENT natom, returning ", natom, natom_read
792 cpabort(
"Incorrect number of atoms in restart file. ")
796 CALL para_env%bcast(nspin_read)
798 ALLOCATE (vecbuffer(1, nao))
803 homo = mos(ispin)%homo
804 mos(ispin)%eigenvalues(:) = 0.0_dp
805 mos(ispin)%occupation_numbers(:) = 0.0_dp
808 IF (para_env%is_source() .AND. (nmo > 0))
THEN
809 READ (rst_unit) nmo_read, homo_read, lfomo_read, nelectron_read
810 ALLOCATE (eig_read(nmo_read), occ_read(nmo_read))
814 nmo = min(nmo, nmo_read)
815 IF (nmo_read < nmo) &
816 CALL cp_warn(__location__, &
817 "The number of MOs on the restart unit is smaller than the number of "// &
818 "the allocated MOs. The MO set will be padded with zeros!")
819 IF (nmo_read > nmo) &
820 CALL cp_warn(__location__, &
821 "The number of MOs on the restart unit is greater than the number of "// &
822 "the allocated MOs. The read MO set will be truncated!")
824 READ (rst_unit) eig_read(1:nmo_read), occ_read(1:nmo_read)
825 mos(ispin)%eigenvalues(1:nmo) = eig_read(1:nmo)
826 mos(ispin)%occupation_numbers(1:nmo) = occ_read(1:nmo)
827 DEALLOCATE (eig_read, occ_read)
829 mos(ispin)%homo = homo_read
830 mos(ispin)%lfomo = lfomo_read
831 IF (min(homo_read, homo) > nmo)
THEN
832 IF (nelectron_read == mos(ispin)%nelectron)
THEN
833 CALL cp_warn(__location__, &
834 "The number of occupied MOs on the restart unit is larger than "// &
835 "the allocated MOs. The read MO set will be truncated and the occupation numbers recalculated!")
840 cpabort(
"Number of occupied MOs on restart unit larger than allocated MOs. ")
845 CALL para_env%bcast(nmo)
846 CALL para_env%bcast(mos(ispin)%homo)
847 CALL para_env%bcast(mos(ispin)%lfomo)
848 CALL para_env%bcast(mos(ispin)%nelectron)
849 CALL para_env%bcast(mos(ispin)%eigenvalues)
850 CALL para_env%bcast(mos(ispin)%occupation_numbers)
852 IF (
PRESENT(rt_mos))
THEN
853 DO imat = 2*ispin - 1, 2*ispin
855 IF (para_env%is_source())
THEN
856 READ (rst_unit) vecbuffer
858 vecbuffer(1, :) = 0.0_dp
860 CALL para_env%bcast(vecbuffer)
862 vecbuffer, 1, i, nao, 1, transpose=.true.)
867 IF (para_env%is_source())
THEN
868 READ (rst_unit) vecbuffer_read
873 NULLIFY (orb_basis_set, dftb_parameter, l, nshell)
874 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
876 basis_set=orb_basis_set, dftb_parameter=dftb_parameter)
877 IF (
ASSOCIATED(orb_basis_set))
THEN
883 ELSEIF (
ASSOCIATED(dftb_parameter))
THEN
900 nnshell = nshell(iset)
902 DO ishell = 1, nnshell
906 lshell = l(ishell, iset)
908 IF (iset_read > nset_info(iatom)) use_this = .false.
910 IF (
nso(lshell) == nso_info(ishell_read, iset_read, iatom))
THEN
911 offset_read = offset_info(ishell_read, iset_read, iatom)
912 ishell_read = ishell_read + 1
913 IF (ishell_read > nshell_info(iset, iatom))
THEN
915 iset_read = iset_read + 1
921 DO iso = 1,
nso(lshell)
923 IF (offset_read - 1 + iso < 1 .OR. offset_read - 1 + iso > nao_read)
THEN
924 vecbuffer(1, irow) = 0.0_dp
926 vecbuffer(1, irow) = vecbuffer_read(1, offset_read - 1 + iso)
929 vecbuffer(1, irow) = 0.0_dp
940 vecbuffer(1, :) = 0.0_dp
944 CALL para_env%bcast(vecbuffer)
946 vecbuffer, 1, i, nao, 1, transpose=.true.)
950 IF (para_env%is_source())
THEN
953 DO i = nmo + 1, nmo_read
954 READ (rst_unit) vecbuffer_read
959 IF (.NOT.
PRESENT(rt_mos))
THEN
960 IF (ispin == 1 .AND. nspin_read < nspin)
THEN
962 mos(ispin + 1)%homo = mos(ispin)%homo
963 mos(ispin + 1)%lfomo = mos(ispin)%lfomo
964 nelectron = mos(ispin)%nelectron
965 IF (my_mult /= 1)
THEN
966 CALL cp_abort(__location__, &
967 "Restarting an LSD calculation from an LDA wfn only works for multiplicity=1 (singlets).")
969 IF (mos(ispin + 1)%nelectron < 0)
THEN
970 cpabort(
"LSD: too few electrons for this multiplisity. ")
972 mos(ispin + 1)%eigenvalues = mos(ispin)%eigenvalues
973 mos(ispin)%occupation_numbers = mos(ispin)%occupation_numbers/2.0_dp
974 mos(ispin + 1)%occupation_numbers = mos(ispin)%occupation_numbers
975 CALL cp_fm_to_fm(mos(ispin)%mo_coeff, mos(ispin + 1)%mo_coeff)
981 DEALLOCATE (vecbuffer)
983 IF (para_env%is_source())
THEN
984 DEALLOCATE (vecbuffer_read)
985 DEALLOCATE (offset_info)
986 DEALLOCATE (nso_info)
987 DEALLOCATE (nshell_info)
988 DEALLOCATE (nset_info)
1020 dft_section, before, kpoint, final_mos, spin, &
1021 solver_method, rtp, cpart, sim_step, umo_set, qs_env)
1024 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1027 INTEGER,
INTENT(IN) :: before, kpoint
1028 LOGICAL,
INTENT(IN),
OPTIONAL :: final_mos
1029 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: spin
1030 CHARACTER(LEN=2),
INTENT(IN),
OPTIONAL :: solver_method
1031 LOGICAL,
INTENT(IN),
OPTIONAL :: rtp
1032 INTEGER,
INTENT(IN),
OPTIONAL :: cpart, sim_step
1033 TYPE(
mo_set_type),
INTENT(IN),
OPTIONAL :: umo_set
1036 CHARACTER(LEN=12) :: symbol
1037 CHARACTER(LEN=12),
DIMENSION(:),
POINTER :: bcgf_symbol
1038 CHARACTER(LEN=14) :: fmtstr5
1039 CHARACTER(LEN=15) :: energy_str, orbital_str, step_string
1040 CHARACTER(LEN=2) :: element_symbol, my_solver_method
1041 CHARACTER(LEN=2*default_string_length) :: name
1042 CHARACTER(LEN=21) :: vector_str
1043 CHARACTER(LEN=22) :: fmtstr4
1044 CHARACTER(LEN=24) :: fmtstr2
1045 CHARACTER(LEN=25) :: fmtstr1
1046 CHARACTER(LEN=29) :: fmtstr6
1047 CHARACTER(LEN=4) :: reim
1048 CHARACTER(LEN=40) :: fmtstr3
1049 CHARACTER(LEN=6),
DIMENSION(:),
POINTER :: bsgf_symbol
1050 INTEGER :: after, first_mo, from, homo, iatom, icgf, ico, icol, ikind, imo, irow, iset, &
1051 isgf, ishell, iso, iw, jcol, last_mo, left, lmax, lshell, nao, natom, ncgf, ncol, nkind, &
1052 nmo, nset, nsgf, numo, right, scf_step, to, width
1053 INTEGER,
DIMENSION(:),
POINTER :: mo_index_range, nshell
1054 INTEGER,
DIMENSION(:, :),
POINTER :: l
1055 LOGICAL :: ionode, my_final, my_rtp, omit_headers, print_cartesian, print_cartesian_overlap, &
1056 print_eigvals, print_eigvecs, print_occup, should_output
1057 REAL(kind=
dp) :: gap, maxocc
1058 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: mo_eigenvalues, mo_occupation_numbers
1059 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: cmatrix, smatrix
1060 REAL(kind=
dp),
DIMENSION(:),
POINTER :: eigenvalues, occupation_numbers
1061 TYPE(
cp_fm_type),
POINTER :: mo_coeff, umo_coeff
1073 NULLIFY (bcgf_symbol)
1074 NULLIFY (bsgf_symbol)
1076 NULLIFY (mo_index_range)
1081 ionode = logger%para_env%is_source()
1088 CALL section_vals_val_get(dft_section,
"PRINT%MO%CARTESIAN_OVERLAP", l_val=print_cartesian_overlap)
1089 after = min(max(after, 1), 16)
1092 IF (
PRESENT(final_mos))
THEN
1093 my_final = final_mos
1100 IF (
PRESENT(rtp))
THEN
1105 .OR. (sim_step == 1)
1111 IF ((.NOT. should_output) .OR. (.NOT. (print_eigvals .OR. print_eigvecs .OR. print_occup)))
RETURN
1114 cpassert(
PRESENT(sim_step))
1115 cpassert(
PRESENT(cpart))
1117 IF (cpart == 0)
THEN
1122 print_eigvals = .false.
1124 scf_step = max(0, logger%iter_info%iteration(logger%iter_info%n_rlevel) - 1)
1127 IF (.NOT. my_final)
THEN
1128 IF (.NOT. my_rtp)
THEN
1129 step_string =
" AFTER SCF STEP"
1131 step_string =
" AFTER RTP STEP"
1135 IF (
PRESENT(solver_method))
THEN
1136 my_solver_method = solver_method
1139 my_solver_method =
"TD"
1144 mo_coeff=mo_coeff, &
1145 eigenvalues=eigenvalues, &
1146 occupation_numbers=occupation_numbers, &
1151 IF (
PRESENT(umo_set))
THEN
1153 mo_coeff=umo_coeff, &
1159 ALLOCATE (mo_eigenvalues(nmo))
1160 mo_eigenvalues(:) = 0.0_dp
1161 mo_eigenvalues(1:nmo - numo) = eigenvalues(1:nmo - numo)
1162 ALLOCATE (mo_occupation_numbers(nmo))
1163 mo_occupation_numbers(:) = 0.0_dp
1164 mo_occupation_numbers(1:nmo - numo) = occupation_numbers(1:nmo - numo)
1167 eigenvalues=eigenvalues)
1168 mo_eigenvalues(nmo - numo + 1:nmo) = eigenvalues(1:numo)
1171 IF (print_eigvecs)
THEN
1172 ALLOCATE (smatrix(nao, nmo))
1177 IF (.NOT. ionode)
THEN
1178 DEALLOCATE (smatrix)
1182 IF (
PRESENT(qs_env))
THEN
1183 IF (
ASSOCIATED(qs_env) .AND. my_final .AND. print_cartesian_overlap)
THEN
1184 NULLIFY (qs_kind_set)
1185 CALL get_qs_env(qs_env=qs_env, qs_kind_set=qs_kind_set)
1186 nkind =
SIZE(qs_kind_set)
1189 qs_env%input,
"DFT%PRINT%AO_MATRICES/OVERLAP"),
cp_p_file))
THEN
1190 ALLOCATE (orb_basis_set_list(nkind))
1192 qs_kind => qs_kind_set(ikind)
1193 NULLIFY (orb_basis_set_list(ikind)%gto_basis_set)
1195 CALL get_qs_kind(qs_kind=qs_kind, basis_set=orbbasis, basis_type=
"ORB")
1196 IF (
ASSOCIATED(orbbasis)) orb_basis_set_list(ikind)%gto_basis_set => orbbasis
1202 CALL get_qs_env(qs_env, ks_env=ks_env, para_env=para_env)
1204 orb_basis_set_list, orb_basis_set_list, sro_list, .true.)
1209 CALL section_vals_val_get(qs_env%input,
"DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
1211 after = min(max(after, 1), 16)
1212 IF (
ASSOCIATED(sro))
THEN
1214 output_unit=iw, omit_headers=omit_headers, &
1215 cartesian_basis=.true.)
1218 "DFT%PRINT%AO_MATRICES/OVERLAP")
1220 DEALLOCATE (orb_basis_set_list)
1226 ignore_should_output=should_output, &
1231 natom =
SIZE(particle_set)
1236 fmtstr1 =
"(T2,A,21X, ( X,I5, X))"
1237 fmtstr2 =
"(T2,A,21X, (1X,F . ))"
1238 fmtstr3 =
"(T2,A,I5,1X,I5,1X,A,1X,A6, (1X,F . ))"
1240 width = before + after + 3
1241 ncol = int(56/width)
1243 right = max((after - 2), 1)
1244 left = width - right - 5
1246 WRITE (unit=fmtstr1(11:12), fmt=
"(I2)") ncol
1247 WRITE (unit=fmtstr1(14:15), fmt=
"(I2)") left
1248 WRITE (unit=fmtstr1(21:22), fmt=
"(I2)") right
1250 WRITE (unit=fmtstr2(11:12), fmt=
"(I2)") ncol
1251 WRITE (unit=fmtstr2(18:19), fmt=
"(I2)") width - 1
1252 WRITE (unit=fmtstr2(21:22), fmt=
"(I2)") after
1254 WRITE (unit=fmtstr3(27:28), fmt=
"(I2)") ncol
1255 WRITE (unit=fmtstr3(34:35), fmt=
"(I2)") width - 1
1256 WRITE (unit=fmtstr3(37:38), fmt=
"(I2)") after
1258 IF (my_final .OR. (my_solver_method ==
"TD"))
THEN
1259 energy_str =
"EIGENVALUES"
1260 vector_str =
"EIGENVECTORS"
1262 energy_str =
"ENERGIES"
1263 vector_str =
"COEFFICIENTS"
1267 energy_str =
"ZEROS"
1268 vector_str = trim(reim)//
" RTP COEFFICIENTS"
1271 IF (print_eigvecs)
THEN
1273 IF (print_cartesian)
THEN
1275 orbital_str =
"CARTESIAN"
1277 ALLOCATE (cmatrix(ncgf, ncgf))
1284 NULLIFY (orb_basis_set, dftb_parameter)
1285 CALL get_atomic_kind(particle_set(iatom)%atomic_kind, kind_number=ikind)
1287 basis_set=orb_basis_set, &
1288 dftb_parameter=dftb_parameter)
1289 IF (
ASSOCIATED(orb_basis_set))
THEN
1295 DO ishell = 1, nshell(iset)
1296 lshell = l(ishell, iset)
1297 CALL dgemm(
"T",
"N",
nco(lshell), nmo,
nso(lshell), 1.0_dp, &
1299 smatrix(isgf, 1), nsgf, 0.0_dp, &
1300 cmatrix(icgf, 1), ncgf)
1301 icgf = icgf +
nco(lshell)
1302 isgf = isgf +
nso(lshell)
1305 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1307 DO ishell = 1, lmax + 1
1309 CALL dgemm(
"T",
"N",
nco(lshell), nsgf,
nso(lshell), 1.0_dp, &
1311 smatrix(isgf, 1), nsgf, 0.0_dp, &
1312 cmatrix(icgf, 1), ncgf)
1313 icgf = icgf +
nco(lshell)
1314 isgf = isgf +
nso(lshell)
1324 orbital_str =
"SPHERICAL"
1328 name = trim(energy_str)//
", OCCUPATION NUMBERS, AND "// &
1329 trim(orbital_str)//
" "//trim(vector_str)
1331 IF (.NOT. my_final) &
1332 WRITE (unit=name, fmt=
"(A,1X,I0)") trim(name)//step_string, scf_step
1334 ELSE IF (print_occup .OR. print_eigvals)
THEN
1335 name = trim(energy_str)//
" AND OCCUPATION NUMBERS"
1337 IF (.NOT. my_final) &
1338 WRITE (unit=name, fmt=
"(A,1X,I0)") trim(name)//step_string, scf_step
1342 IF (
PRESENT(spin) .AND. (kpoint > 0))
THEN
1343 WRITE (unit=iw, fmt=
"(/,T2,A,I0)") &
1344 "MO| "//trim(spin)//
" "//trim(name)//
" FOR K POINT ", kpoint
1345 ELSE IF (
PRESENT(spin))
THEN
1346 WRITE (unit=iw, fmt=
"(/,T2,A)") &
1347 "MO| "//trim(spin)//
" "//trim(name)
1348 ELSE IF (kpoint > 0)
THEN
1349 WRITE (unit=iw, fmt=
"(/,T2,A,I0)") &
1350 "MO| "//trim(name)//
" FOR K POINT ", kpoint
1352 WRITE (unit=iw, fmt=
"(/,T2,A)") &
1357 IF (all(mo_index_range > 0))
THEN
1358 IF (mo_index_range(2) > nmo)
THEN
1359 CALL cp_warn(__location__, &
1360 "The last orbital index is larger than the number of orbitals.")
1362 IF (mo_index_range(1) > mo_index_range(2))
THEN
1363 CALL cp_warn(__location__, &
1364 "The first orbital index is larger than the last orbital index.")
1366 first_mo = min(max(1, mo_index_range(1)), nmo)
1367 last_mo = min(max(first_mo, mo_index_range(2)), nmo)
1368 ELSE IF (mo_index_range(2) < 0)
THEN
1369 IF (mo_index_range(1) > nmo)
THEN
1370 CALL cp_warn(__location__, &
1371 "The first orbital index is larger than the number of orbitals.")
1373 first_mo = min(max(1, mo_index_range(1)), nmo)
1380 IF (print_eigvecs)
THEN
1384 DO icol = first_mo, last_mo, ncol
1387 to = min((from + ncol - 1), last_mo)
1389 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1390 WRITE (unit=iw, fmt=fmtstr1) &
1391 "MO|", (jcol, jcol=from, to)
1392 WRITE (unit=iw, fmt=fmtstr2) &
1393 "MO|", (mo_eigenvalues(jcol), jcol=from, to)
1394 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1395 WRITE (unit=iw, fmt=fmtstr2) &
1396 "MO|", (mo_occupation_numbers(jcol), jcol=from, to)
1397 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1403 IF (iatom /= 1)
WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1405 NULLIFY (orb_basis_set, dftb_parameter)
1407 element_symbol=element_symbol, kind_number=ikind)
1409 basis_set=orb_basis_set, &
1410 dftb_parameter=dftb_parameter)
1412 IF (print_cartesian)
THEN
1414 IF (
ASSOCIATED(orb_basis_set))
THEN
1423 DO ishell = 1, nshell(iset)
1424 lshell = l(ishell, iset)
1425 DO ico = 1,
nco(lshell)
1426 WRITE (unit=iw, fmt=fmtstr3) &
1427 "MO|", irow, iatom, adjustr(element_symbol), bcgf_symbol(icgf), &
1428 (cmatrix(irow, jcol), jcol=from, to)
1434 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1437 DO ishell = 1, lmax + 1
1439 DO ico = 1,
nco(lshell)
1442 WRITE (unit=iw, fmt=fmtstr3) &
1443 "MO|", irow, iatom, adjustr(element_symbol), symbol, &
1444 (cmatrix(irow, jcol), jcol=from, to)
1456 IF (
ASSOCIATED(orb_basis_set))
THEN
1464 DO ishell = 1, nshell(iset)
1465 lshell = l(ishell, iset)
1466 DO iso = 1,
nso(lshell)
1467 WRITE (unit=iw, fmt=fmtstr3) &
1468 "MO|", irow, iatom, adjustr(element_symbol), bsgf_symbol(isgf), &
1469 (smatrix(irow, jcol), jcol=from, to)
1475 ELSE IF (
ASSOCIATED(dftb_parameter))
THEN
1478 DO ishell = 1, lmax + 1
1480 DO iso = 1,
nso(lshell)
1481 symbol =
sgf_symbol(1, lshell, -lshell + iso - 1)
1483 WRITE (unit=iw, fmt=fmtstr3) &
1484 "MO|", irow, iatom, adjustr(element_symbol), symbol, &
1485 (smatrix(irow, jcol), jcol=from, to)
1501 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1505 IF (print_cartesian)
THEN
1506 DEALLOCATE (cmatrix)
1508 DEALLOCATE (smatrix)
1510 ELSE IF (print_occup .OR. print_eigvals)
THEN
1512 WRITE (unit=iw, fmt=
"(T2,A)")
"MO|"
1513 fmtstr4 =
"(T2,A,I7,3(1X,F22. ))"
1514 WRITE (unit=fmtstr4(19:20), fmt=
"(I2)") after
1515 IF (my_final .OR. (my_solver_method ==
"TD"))
THEN
1516 WRITE (unit=iw, fmt=
"(A)") &
1517 " MO| Index Eigenvalue [a.u.] Eigenvalue [eV] Occupation"
1519 WRITE (unit=iw, fmt=
"(A)") &
1520 " MO| Index Energy [a.u.] Energy [eV] Occupation"
1522 DO imo = first_mo, last_mo
1523 WRITE (unit=iw, fmt=fmtstr4) &
1524 "MO|", imo, mo_eigenvalues(imo), &
1525 mo_eigenvalues(imo)*
evolt, &
1526 mo_occupation_numbers(imo)
1528 fmtstr5 =
"(A,T59,F22. )"
1529 WRITE (unit=fmtstr5(12:13), fmt=
"(I2)") after
1530 WRITE (unit=iw, fmt=fmtstr5) &
1535 IF (.NOT. my_rtp)
THEN
1536 fmtstr6 =
"(A,T18,F17. ,A,T41,F17. ,A)"
1537 WRITE (unit=fmtstr6(12:13), fmt=
"(I2)") after
1538 WRITE (unit=fmtstr6(25:26), fmt=
"(I2)") after
1539 WRITE (unit=iw, fmt=fmtstr6) &
1540 " MO| E(Fermi):", mo_set%mu,
" a.u.", mo_set%mu*
evolt,
" eV"
1542 IF ((homo > 0) .AND. .NOT. my_rtp)
THEN
1543 IF ((mo_occupation_numbers(homo) == maxocc) .AND. (last_mo > homo))
THEN
1544 gap = mo_eigenvalues(homo + 1) - &
1545 mo_eigenvalues(homo)
1546 WRITE (unit=iw, fmt=fmtstr6) &
1547 " MO| Band gap:", gap,
" a.u.", gap*
evolt,
" eV"
1550 WRITE (unit=iw, fmt=
"(A)")
""
1554 IF (
ALLOCATED(mo_eigenvalues))
DEALLOCATE (mo_eigenvalues)
1555 IF (
ALLOCATED(mo_occupation_numbers))
DEALLOCATE (mo_occupation_numbers)
1558 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)
...
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)
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. Tracking of preconnections.
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
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...
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)
...
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...
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, 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, 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, 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, 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_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)
Write MO information to output file (eigenvalues, occupation numbers, coefficients)
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_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)
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.
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 ...