95#include "./base/base_uses.f90"
101 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_soc'
103 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
105 INTEGER,
PARAMETER,
PRIVATE :: nderivs = 3
106 INTEGER,
PARAMETER,
PRIVATE :: maxspins = 2
109 TYPE dbcsr_soc_package_type
110 TYPE(dbcsr_type),
POINTER :: dbcsr_sg => null()
111 TYPE(dbcsr_type),
POINTER :: dbcsr_tp => null()
112 TYPE(dbcsr_type),
POINTER :: dbcsr_sc => null()
113 TYPE(dbcsr_type),
POINTER :: dbcsr_sf => null()
114 TYPE(dbcsr_type),
POINTER :: dbcsr_prod => null()
115 TYPE(dbcsr_type),
POINTER :: dbcsr_ovlp => null()
116 TYPE(dbcsr_type),
POINTER :: dbcsr_tmp => null()
117 TYPE(dbcsr_type),
POINTER :: dbcsr_work => null()
118 END TYPE dbcsr_soc_package_type
140 SUBROUTINE tddfpt_soc(qs_env, evals_a, evals_b, evects_a, evects_b, gs_mos)
143 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: evals_a, evals_b
144 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_a, evects_b
148 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_soc'
150 INTEGER :: handle, istate, log_unit
155 CALL timeset(routinen, handle)
158 IF (logger%para_env%is_source())
THEN
164 IF (log_unit > 0)
THEN
165 WRITE (log_unit,
"(1X,A)")
"", &
166 "-------------------------------------------------------------------------------", &
167 "- START SOC CALCULATIONS -", &
168 "-------------------------------------------------------------------------------"
171 NULLIFY (dft_control)
172 CALL get_qs_env(qs_env, dft_control=dft_control)
173 do_os = dft_control%uks .OR. dft_control%roks
174 IF (do_os) cpabort(
"SOC only implemented for closed shell.")
176 IF (log_unit > 0)
THEN
177 WRITE (log_unit,
'(A)')
"Starting from TDDFPT Excited States:"
178 WRITE (log_unit,
'(A)')
" STATE SINGLET/eV TRIPLET/eV"
179 DO istate = 1,
SIZE(evals_a)
180 WRITE (log_unit,
'(6X,I3,11X,F10.5,6X,F10.5)') istate, evals_a(istate)*
evolt, evals_b(istate)*
evolt
184 IF (log_unit > 0)
WRITE (log_unit,
'(A)')
"Starting restricted closed shell:"
185 CALL tddfpt_soc_rcs(qs_env, evals_a, evals_b, evects_a, evects_b, log_unit, gs_mos)
187 IF (log_unit > 0)
THEN
188 WRITE (log_unit,
'(A,/,A)')
"SOC Calculation terminated", &
189 "Returning to TDDFPT for Force calculation and deallocations"
192 CALL timestop(handle)
209 SUBROUTINE tddfpt_soc_rcs(qs_env, evals_sing, evals_trip, evects_sing, evects_trip, log_unit, gs_mos)
212 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
TARGET :: evals_sing, evals_trip
213 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
218 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_soc_rcs'
220 CHARACTER(len=3) :: mult
221 INTEGER :: dipole_form, group, handle, iex, ii, &
222 isg, istate, itp, jj, nactive, nao, &
223 nex, npcols, nprows, nsg, ntot, ntp
224 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: evects_sort
225 INTEGER,
DIMENSION(:),
POINTER :: col_blk_size, col_dist, row_blk_size, &
226 row_dist, row_dist_new
227 INTEGER,
DIMENSION(:, :),
POINTER :: pgrid
228 LOGICAL :: print_ev, print_some, print_splitting, &
230 REAL(
dp) :: eps_filter, soc_gst, sqrt2, unit_scale
231 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) ::
diag, tmp_evals
232 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: img_tmp, real_tmp
233 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: gstp_block, mo_soc_x, mo_soc_y, mo_soc_z
237 vec_struct, work_struct
238 TYPE(
cp_fm_type) :: gstp_fm, img_fm, prod_fm, real_fm, &
239 tmp_fm, vec_soc_x, vec_soc_y, &
241 TYPE(
cp_fm_type),
POINTER :: gs_coeffs, tp_coeffs
245 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
246 TYPE(
dbcsr_type),
POINTER :: dbcsr_dummy, dbcsr_ovlp, dbcsr_prod, &
247 dbcsr_sg, dbcsr_tmp, dbcsr_tp, &
248 dbcsr_work, orb_soc_x, orb_soc_y, &
257 CALL timeset(routinen, handle)
259 NULLIFY (logger, pgrid, row_dist, row_dist_new)
260 NULLIFY (col_dist, col_blk_size, row_blk_size, matrix_s)
261 NULLIFY (gstp_struct, tddfpt_print_section, soc_print_section, soc_section)
270 nsg =
SIZE(evals_sing)
271 ntp =
SIZE(evals_trip)
273 ntot = 1 + nsg + 3*ntp
276 CALL inititialize_soc(qs_env, soc_atom_env, soc_env, &
277 evects_sing, evects_trip, dipole_form, gs_mos)
280 CALL get_qs_env(qs_env, mos=mos, para_env=para_env, blacs_env=blacs_env)
281 CALL get_mo_set(mos(1), nao=nao, homo=nactive)
288 NULLIFY (tp_coeffs, orb_soc_x, orb_soc_y, orb_soc_z)
289 tp_coeffs => soc_env%b_coeff
290 soc_env%evals_a => evals_sing
291 soc_env%evals_b => evals_trip
292 orb_soc_x => soc_env%orb_soc(1)%matrix
293 orb_soc_y => soc_env%orb_soc(2)%matrix
294 orb_soc_z => soc_env%orb_soc(3)%matrix
297 NULLIFY (full_struct)
298 CALL cp_fm_struct_create(full_struct, context=blacs_env, para_env=para_env, nrow_global=ntot, ncol_global=ntot)
311 CALL cp_fm_set_element(real_fm, 1 + itp + ntp + nsg, 1 + itp + ntp + nsg, evals_trip(itp))
312 CALL cp_fm_set_element(real_fm, 1 + itp + 2*ntp + nsg, 1 + itp + 2*ntp + nsg, evals_trip(itp))
316 CALL get_qs_env(qs_env, dbcsr_dist=dbcsr_dist)
318 npcols=npcols, nprows=nprows)
319 ALLOCATE (col_dist(nex), row_dist_new(nex))
321 col_dist(iex) =
modulo(npcols - iex, npcols)
322 row_dist_new(iex) =
modulo(nprows - iex, nprows)
324 ALLOCATE (coeffs_dist, prod_dist)
331 ALLOCATE (col_blk_size(nex))
332 col_blk_size = nactive
335 CALL dbcsr_get_info(matrix_s(1)%matrix, row_blk_size=row_blk_size)
338 ALLOCATE (dbcsr_sg, dbcsr_tp, dbcsr_work, dbcsr_ovlp, dbcsr_tmp, dbcsr_prod)
339 CALL dbcsr_create(matrix=dbcsr_sg, name=
"SINGLETS", matrix_type=dbcsr_type_no_symmetry, &
340 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
341 CALL dbcsr_create(matrix=dbcsr_tp, name=
"TRIPLETS", matrix_type=dbcsr_type_no_symmetry, &
342 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
343 CALL dbcsr_create(matrix=dbcsr_work, name=
"WORK", matrix_type=dbcsr_type_no_symmetry, &
344 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
345 CALL dbcsr_create(matrix=dbcsr_prod, name=
"PROD", matrix_type=dbcsr_type_no_symmetry, &
346 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
347 CALL dbcsr_create(matrix=dbcsr_ovlp, name=
"OVLP", matrix_type=dbcsr_type_no_symmetry, &
348 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
351 CALL dbcsr_create(matrix=dbcsr_tmp, name=
"TMP", matrix_type=dbcsr_type_no_symmetry, &
352 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
355 IF (debug_this_module)
THEN
356 ALLOCATE (dbcsr_dummy)
357 CALL dbcsr_create(matrix=dbcsr_dummy, name=
"DUMMY", matrix_type=dbcsr_type_no_symmetry, &
358 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
363 dbcsr_soc_package%dbcsr_sg => dbcsr_sg
364 dbcsr_soc_package%dbcsr_tp => dbcsr_tp
365 dbcsr_soc_package%dbcsr_work => dbcsr_work
366 dbcsr_soc_package%dbcsr_ovlp => dbcsr_ovlp
367 dbcsr_soc_package%dbcsr_prod => dbcsr_prod
368 dbcsr_soc_package%dbcsr_tmp => dbcsr_tmp
376 gs_coeffs => gs_mos(1)%mos_occ
383 nrow_global=nactive, ncol_global=nactive)
387 nrow_global=nex, ncol_global=nex)
391 IF (log_unit > 0 .AND. debug_this_module)
THEN
392 WRITE (log_unit,
'(A)')
"Starting Precomputations"
403 ALLOCATE (
diag(nactive))
404 ALLOCATE (mo_soc_x(nactive, nactive), mo_soc_y(nactive, nactive), mo_soc_z(nactive, nactive))
409 nactive, nao, 1.0_dp, &
410 gs_coeffs, vec_soc_x, &
416 nactive, nao, 1.0_dp, &
417 gs_coeffs, vec_soc_y, &
423 nactive, nao, 1.0_dp, &
424 gs_coeffs, vec_soc_z, &
431 IF (log_unit > 0 .AND. debug_this_module)
THEN
432 WRITE (log_unit,
'(A)')
"Starting Ground-State contributions..."
438 nrow_global=ntp*nactive, ncol_global=nactive)
440 ALLOCATE (gstp_block(nactive, nactive))
446 nactive, nao, -1.0_dp, &
447 tp_coeffs, vec_soc_x, &
453 start_row=(itp - 1)*nactive + 1, start_col=1, &
454 n_rows=nactive, n_cols=nactive)
463 IF (debug_this_module .AND. (log_unit > 0))
THEN
464 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_x|T^-1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
465 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_x|T^+1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
471 nactive, nao, -1.0_dp, &
472 tp_coeffs, vec_soc_y, &
476 CALL cp_fm_get_submatrix(fm=gstp_fm, target_m=gstp_block, start_row=(itp - 1)*nactive + 1, &
477 start_col=1, n_rows=nactive, n_cols=nactive)
486 IF (debug_this_module .AND. (log_unit > 0))
THEN
487 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_y|T^-1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
488 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_y|T^+1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
494 nactive, nao, -1.0_dp, &
495 tp_coeffs, vec_soc_z, &
500 target_m=gstp_block, &
501 start_row=(itp - 1)*nactive + 1, &
506 soc_gst = sqrt2*sum(
diag)
510 IF (debug_this_module .AND. (log_unit > 0))
THEN
511 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_z|T> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
527 DEALLOCATE (gstp_block)
529 IF (log_unit > 0 .AND. debug_this_module)
THEN
530 WRITE (log_unit,
'(A)')
"Starting Singlet-Triplet contributions..."
537 matrix_s(1)%matrix, &
540 filter_eps=eps_filter)
544 0.0_dp, dbcsr_ovlp, &
545 filter_eps=eps_filter)
553 filter_eps=eps_filter)
556 dbcsr_work, 0.0_dp, &
558 filter_eps=eps_filter)
566 pref_trace=-1.0_dp, &
567 pref_overall=-0.5_dp*sqrt2)
579 t_firstcol=1 + nsg + 1)
581 IF (debug_this_module)
THEN
582 WRITE (log_unit,
"(/,A)")
"<S|H_x|T^-1> in Hartree / cm^-1"
597 t_firstcol=1 + nsg + 2*ntp + 1)
599 IF (debug_this_module)
THEN
600 WRITE (log_unit,
"(/,A)")
"<S|H_x|T^+1> in Hartree / cm^-1"
609 orb_soc_y, dbcsr_tp, &
610 0.0_dp, dbcsr_work, &
611 filter_eps=eps_filter)
613 dbcsr_sg, dbcsr_work, &
614 0.0_dp, dbcsr_prod, &
615 filter_eps=eps_filter)
622 pref_trace=-1.0_dp, &
623 pref_overall=-0.5_dp*sqrt2)
634 t_firstcol=1 + nsg + 1)
636 IF (debug_this_module)
THEN
637 WRITE (log_unit,
"(/,A)")
"<S|H_y|T^-1> in Hartree / cm^-1"
651 t_firstcol=1 + nsg + 2*ntp + 1)
653 IF (debug_this_module)
THEN
654 WRITE (log_unit,
"(/,A)")
"<S|H_y|T^+1> in Hartree / cm^-1"
662 orb_soc_z, dbcsr_tp, &
663 0.0_dp, dbcsr_work, &
664 filter_eps=eps_filter)
666 dbcsr_sg, dbcsr_work, &
667 0.0_dp, dbcsr_prod, &
668 filter_eps=eps_filter)
674 pref_trace=-1.0_dp, &
686 t_firstcol=1 + nsg + ntp + 1)
688 IF (debug_this_module)
THEN
689 WRITE (log_unit,
"(/,A)")
"<S|H_z|T^0> in Hartree / cm^-1"
695 IF (log_unit > 0 .AND. debug_this_module)
THEN
696 WRITE (log_unit,
'(A)')
"Starting Triplet-Triplet contributions..."
702 matrix_s(1)%matrix, &
705 filter_eps=eps_filter)
707 dbcsr_tp, dbcsr_work, &
708 0.0_dp, dbcsr_ovlp, &
709 filter_eps=eps_filter)
713 orb_soc_x, dbcsr_tp, &
714 0.0_dp, dbcsr_work, &
715 filter_eps=eps_filter)
717 dbcsr_tp, dbcsr_work, &
718 0.0_dp, dbcsr_prod, &
719 filter_eps=eps_filter)
726 pref_overall=-0.5_dp*sqrt2)
736 t_firstrow=1 + nsg + ntp + 1, &
737 t_firstcol=1 + nsg + 2*ntp + 1)
739 IF (debug_this_module)
THEN
740 WRITE (log_unit,
"(/,A)")
"<T^0|H_x|T^+1> in Hartree / cm^-1"
755 t_firstrow=1 + nsg + 1, &
756 t_firstcol=1 + nsg + ntp + 1)
758 IF (debug_this_module)
THEN
759 WRITE (log_unit,
"(/,A)")
"<T^-1|H_x|T^0> in Hartree / cm^-1"
767 orb_soc_y, dbcsr_tp, &
768 0.0_dp, dbcsr_work, &
769 filter_eps=eps_filter)
771 dbcsr_tp, dbcsr_work, &
772 0.0_dp, dbcsr_prod, &
773 filter_eps=eps_filter)
780 pref_overall=0.5_dp*sqrt2)
789 s_firstcol=1, t_firstrow=1 + nsg + ntp + 1, &
790 t_firstcol=1 + nsg + 2*ntp + 1)
792 IF (debug_this_module)
THEN
793 WRITE (log_unit,
"(/,A)")
"<T^0|H_y|T^+1> in Hartree / cm^-1"
807 s_firstcol=1, t_firstrow=1 + nsg + 1, &
808 t_firstcol=1 + nsg + ntp + 1)
810 IF (debug_this_module)
THEN
811 WRITE (log_unit,
"(/,A)")
"<T^0|H_y|T^+1> in Hartree / cm^-1"
819 orb_soc_z, dbcsr_tp, &
820 0.0_dp, dbcsr_work, &
821 filter_eps=eps_filter)
823 dbcsr_tp, dbcsr_work, &
824 0.0_dp, dbcsr_prod, &
825 filter_eps=eps_filter)
842 t_firstrow=1 + nsg + 2*ntp + 1, &
843 t_firstcol=1 + nsg + 2*ntp + 1)
845 IF (debug_this_module)
THEN
846 WRITE (log_unit,
"(/,A)")
"<T^+1|H_z|T^+1> in Hartree / cm^-1"
860 t_firstrow=1 + nsg + 1, &
861 t_firstcol=1 + nsg + 1)
863 IF (debug_this_module)
THEN
864 WRITE (log_unit,
"(/,A)")
"<T^-1|H_z|T^-1> in Hartree / cm^-1"
874 DEALLOCATE (
diag, mo_soc_x, mo_soc_y, mo_soc_z)
876 IF (log_unit > 0)
THEN
877 WRITE (log_unit,
'(A)')
"Diagonlzing SOC-Matrix"
885 IF (logger%para_env%is_source())
THEN
887 tddfpt_print_section, &
889 extension=
".socme", &
890 file_form=
"FORMATTED", &
891 file_action=
"WRITE", &
892 file_status=
"UNKNOWN")
907 ELSE IF (print_ev)
THEN
910 cpwarn(
"No output unit was selected, printout will be in Hartree!")
917 IF (log_unit > 0)
THEN
918 WRITE (log_unit,
'(A)')
"____________________________________________________"
919 WRITE (log_unit,
'(A)')
" FULL SOC-Matrix "
921 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[eV] IMG-PART[eV] "
922 ELSE IF (print_wn)
THEN
923 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[cm-1] IMG-PART[cm-1]"
925 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[Hartree] IMG-PART[Hartree]"
927 WRITE (log_unit,
'(A)')
"____________________________________________________"
929 ALLOCATE (real_tmp(ntot, ntot), img_tmp(ntot, ntot))
936 IF (log_unit > 0)
THEN
939 WRITE (unit=log_unit, fmt=
"(I3,5X,I3,5X,f16.8,5X,f16.8)") ii, jj, &
940 real_tmp(ii, jj)*unit_scale, &
941 img_tmp(ii, jj)*unit_scale
944 WRITE (log_unit,
'(A)')
" END SOC-MATRIX "
945 WRITE (log_unit,
'(A)')
"____________________________________________________"
946 WRITE (log_unit,
'(A)')
"____________________________________________________"
948 DEALLOCATE (real_tmp, img_tmp)
955 ALLOCATE (tmp_evals(ntot))
960 ALLOCATE (soc_env%soc_evals(ntot - 1))
961 soc_env%soc_evals(:) = tmp_evals(2:ntot) - tmp_evals(1)
964 IF (logger%para_env%is_source())
THEN
970 IF (log_unit > 0)
THEN
971 WRITE (log_unit,
'(A27,6X,F18.10)')
"Ground state stabilisation:", (soc_env%soc_evals(1)*unit_scale)
972 IF (debug_this_module)
THEN
973 WRITE (log_unit,
'(A)')
"Calculation Dipole Moments"
978 soc_env%evals_a => evals_sing
979 soc_env%evals_b => evals_trip
980 CALL soc_dipol(qs_env, dbcsr_soc_package, soc_env, &
981 evecs_cfm, eps_filter, dipole_form, gs_mos, &
982 evects_sing, evects_trip)
986 IF (logger%para_env%is_source())
THEN
992 IF (log_unit > 0)
THEN
993 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
994 WRITE (log_unit,
'(A)')
"- SOC CORRECTED SPECTRUM -"
995 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
997 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc. energies [eV] Oscillator strengths [a.u.] -"
998 ELSE IF (print_wn)
THEN
999 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc. energies [cm-1] Oscillator strengths [a.u.]-"
1001 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc.energies [Hartree] Oscillator strengths [a.u.]-"
1003 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
1004 DO istate = 1,
SIZE(soc_env%soc_evals)
1005 WRITE (log_unit,
'(6X,I5,11X,2F16.5)') istate, soc_env%soc_evals(istate)*unit_scale, &
1006 soc_env%soc_osc(istate)
1009 WRITE (log_unit,
'(A,F18.8)')
"TDDFT+SOC : CheckSum (eV) ", sum(soc_env%soc_evals)*
evolt
1015 IF (print_splitting .OR. debug_this_module)
THEN
1017 IF (log_unit > 0)
THEN
1018 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1019 WRITE (log_unit,
'(A)')
"- Splittings -"
1020 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1022 WRITE (log_unit,
'(A)')
"- STATE exc.energies[eV] splittings[eV] -"
1023 ELSE IF (print_wn)
THEN
1024 WRITE (log_unit,
'(A)')
"- STATE exc.energies[cm-1] splittings[cm-1] -"
1026 WRITE (log_unit,
'(A)')
"- STATE exc.energies[Hartree] splittings[Hartree] -"
1028 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1030 DO iex = 1,
SIZE(soc_env%soc_evals)
1031 IF (evects_sort(iex + 1) .GT. nsg + ntp*2 + 1)
THEN
1033 ELSE IF (evects_sort(iex + 1) .GT. nsg + ntp + 1)
THEN
1035 ELSE IF (evects_sort(iex + 1) .GT. nsg + 1)
THEN
1040 IF (mult ==
"T-1")
THEN
1041 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1042 evects_sort(iex + 1) - (1 + nsg), soc_env%soc_evals(iex)*unit_scale, &
1043 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg)))*unit_scale
1044 ELSE IF (mult ==
"T0")
THEN
1045 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1046 evects_sort(iex + 1) - (1 + nsg + ntp), soc_env%soc_evals(iex)*unit_scale, &
1047 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg + ntp)))*unit_scale
1048 ELSE IF (mult ==
"T+1")
THEN
1049 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1050 evects_sort(iex + 1) - (1 + nsg + ntp*2), soc_env%soc_evals(iex)*unit_scale, &
1051 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg + ntp*2)))*unit_scale
1052 ELSE IF (mult ==
"S ")
THEN
1053 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1054 evects_sort(iex + 1), soc_env%soc_evals(iex)*unit_scale, &
1055 (soc_env%soc_evals(iex) - evals_sing(evects_sort(iex + 1) - 1))*unit_scale
1058 WRITE (log_unit,
'(A)')
"----------------------------------------------------------------------------"
1059 DEALLOCATE (evects_sort)
1076 IF (debug_this_module)
THEN
1078 DEALLOCATE (dbcsr_dummy)
1081 DEALLOCATE (dbcsr_work, dbcsr_prod, dbcsr_ovlp, dbcsr_tmp)
1082 DEALLOCATE (coeffs_dist, prod_dist, col_dist, col_blk_size, row_dist_new)
1083 DEALLOCATE (dbcsr_sg, dbcsr_tp, tmp_evals)
1085 CALL timestop(handle)
1087 END SUBROUTINE tddfpt_soc_rcs
1099 SUBROUTINE inititialize_soc(qs_env, soc_atom_env, soc_env, &
1100 evects_a, evects_b, &
1101 dipole_form, gs_mos)
1106 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_a, evects_b
1107 INTEGER :: dipole_form
1109 INTENT(in) :: gs_mos
1111 CHARACTER(LEN=*),
PARAMETER :: routinen =
'inititialize_soc'
1113 CHARACTER(len=default_string_length), &
1114 ALLOCATABLE,
DIMENSION(:, :) :: grid_info
1115 CHARACTER(len=default_string_length), &
1116 DIMENSION(:),
POINTER :: k_list
1117 INTEGER :: handle, i, ikind, irep, ispin, nactive, &
1118 nao, natom, nkind, nrep, nspins, &
1120 LOGICAL :: all_potential_present, do_os
1123 TYPE(
cp_fm_type),
POINTER :: a_coeff, b_coeff
1129 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1133 CALL timeset(routinen, handle)
1135 NULLIFY (qs_kind_set, particle_set, blacs_env, para_env, &
1136 a_coeff, b_coeff, tddfpt_control, soc_section)
1143 CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, &
1144 mos=mos, natom=natom, &
1145 particle_set=particle_set, blacs_env=blacs_env, &
1146 para_env=para_env, matrix_s=matrix_s, &
1147 dft_control=dft_control)
1150 tddfpt_control => dft_control%tddfpt2_control
1151 dipole_form = tddfpt_control%dipole_form
1157 ALLOCATE (grid_info(nrep, 3))
1163 grid_info(irep, :) = k_list
1168 nspins =
SIZE(evects_a, 1)
1169 DO ispin = 1, nspins
1170 CALL cp_fm_get_info(evects_a(ispin, 1), nrow_global=nao, ncol_global=nactive)
1175 nstates =
SIZE(evects_a, 2)
1177 a_coeff => soc_env%a_coeff
1178 b_coeff => soc_env%b_coeff
1182 nrow_global=nao, ncol_global=nspins*nactive*nstates)
1190 ALLOCATE (soc_env%orb_soc(3))
1192 ALLOCATE (soc_env%orb_soc(i)%matrix)
1199 soc_atom_env%nspins = 2
1201 soc_atom_env%nspins = 1
1204 nkind =
SIZE(qs_kind_set)
1205 ALLOCATE (soc_atom_env%grid_atom_set(nkind))
1206 ALLOCATE (soc_atom_env%harmonics_atom_set(nkind))
1207 ALLOCATE (soc_atom_env%orb_sphi_so(nkind))
1209 CALL get_qs_kind_set(qs_kind_set, all_potential_present=all_potential_present)
1210 IF (.NOT. all_potential_present)
THEN
1216 CALL init_atom_grid(soc_atom_env, grid_info, qs_env)
1219 NULLIFY (soc_atom_env%orb_sphi_so(ikind)%array)
1220 CALL compute_sphi_so(ikind,
"ORB", soc_atom_env%orb_sphi_so(ikind)%array, qs_env)
1223 DEALLOCATE (grid_info)
1225 CALL timestop(handle)
1227 END SUBROUTINE inititialize_soc
1236 SUBROUTINE init_atom_grid(soc_atom_env, grid_info, qs_env)
1239 CHARACTER(len=default_string_length), &
1240 ALLOCATABLE,
DIMENSION(:, :) :: grid_info
1243 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_atom_grid'
1245 CHARACTER(LEN=default_string_length) :: kind_name
1246 INTEGER :: handle, igrid, ikind, il, iso, iso1, iso2, l1, l1l2, l2, la, lc1, lc2, lcleb, ll, &
1247 llmax, lp, m1, m2, max_s_harm, max_s_set, maxl, maxlgto, maxs, mm, mp, na, nr, &
1249 REAL(
dp) :: kind_radius
1250 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: rga
1251 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg
1257 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1259 CALL timeset(routinen, handle)
1261 NULLIFY (my_cg, qs_kind_set, dft_control, qs_control)
1262 NULLIFY (grid_atom, harmonics, tmp_basis)
1266 qs_kind_set=qs_kind_set, &
1267 dft_control=dft_control)
1270 qs_control => dft_control%qs_control
1273 IF (maxlgto < 0)
THEN
1274 cpabort(
"tmp_basis is not Present!")
1279 max_s_harm =
nsoset(llmax)
1280 max_s_set =
nsoset(maxlgto)
1285 CALL reallocate(my_cg, 1, max_s_set, 1, max_s_set, 1, max_s_harm)
1287 ALLOCATE (rga(lcleb, 2))
1297 IF (l1 + l2 > llmax)
THEN
1304 IF (m1*m2 < 0 .OR. (m1*m2 == 0 .AND. (m1 < 0 .OR. m2 < 0)))
THEN
1311 DO lp = mod(l1 + l2, 2), l1l2, 2
1313 IF (abs(mp) <= lp)
THEN
1315 iso =
nsoset(lp - 1) + lp + 1 + mp
1317 iso =
nsoset(lp - 1) + lp + 1 - abs(mp)
1319 my_cg(iso1, iso2, iso) = rga(il, 1)
1321 IF (mp /= mm .AND. abs(mm) <= lp)
THEN
1323 iso =
nsoset(lp - 1) + lp + 1 + mm
1325 iso =
nsoset(lp - 1) + lp + 1 - abs(mm)
1327 my_cg(iso1, iso2, iso) = rga(il, 2)
1339 quadrature = qs_control%gapw_control%quadrature
1341 DO ikind = 1,
SIZE(soc_atom_env%grid_atom_set)
1344 NULLIFY (soc_atom_env%grid_atom_set(ikind)%grid_atom)
1345 NULLIFY (soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom)
1348 soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom)
1350 NULLIFY (grid_atom, harmonics)
1351 grid_atom => soc_atom_env%grid_atom_set(ikind)%grid_atom
1352 harmonics => soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom
1361 DO igrid = 1,
SIZE(grid_info, 1)
1362 IF (grid_info(igrid, 1) == kind_name)
THEN
1363 READ (grid_info(igrid, 2), *, iostat=stat) na
1364 IF (stat .NE. 0) cpabort(
"The 'na' value for the GRID keyword must be an integer")
1365 READ (grid_info(igrid, 3), *, iostat=stat) nr
1366 IF (stat .NE. 0) cpabort(
"The 'nr' value for the GRID keyword must be an integer")
1374 grid_atom%ng_sphere = na
1379 basis_set=tmp_basis, &
1383 kind_radius=kind_radius)
1396 CALL get_maxl_cg(harmonics, tmp_basis, llmax, max_s_harm)
1402 CALL timestop(handle)
1404 END SUBROUTINE init_atom_grid
1418 SUBROUTINE soc_dipol(qs_env, dbcsr_soc_package, soc_env, &
1419 soc_evecs_cfm, eps_filter, dipole_form, gs_mos, &
1420 evects_sing, evects_trip)
1422 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
1425 REAL(
dp),
INTENT(IN) :: eps_filter
1426 INTEGER :: dipole_form
1429 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
1431 CHARACTER(len=*),
PARAMETER :: routinen =
'soc_dipol'
1433 COMPLEX(dp),
ALLOCATABLE,
DIMENSION(:, :) :: transdip
1434 INTEGER :: handle, i, nosc, ntot
1435 REAL(
dp),
DIMENSION(:),
POINTER :: osc_str, soc_evals
1437 TYPE(
cp_cfm_type) :: dip_cfm, work1_cfm, work2_cfm
1439 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: amew_dip
1442 CALL timeset(routinen, handle)
1444 NULLIFY (para_env, blacs_env, dip_struct, full_struct, osc_str)
1447 CALL get_qs_env(qs_env, para_env=para_env, blacs_env=blacs_env)
1449 soc_evals => soc_env%soc_evals
1450 nosc =
SIZE(soc_evals)
1452 ALLOCATE (soc_env%soc_osc(nosc))
1453 osc_str => soc_env%soc_osc
1458 context=blacs_env, para_env=para_env, &
1459 nrow_global=ntot, ncol_global=1)
1466 ALLOCATE (transdip(ntot, 1))
1468 CALL get_rcs_amew_op(amew_dip, soc_env, dbcsr_soc_package, &
1469 eps_filter, qs_env, gs_mos, &
1470 evects_sing, evects_trip)
1475 CALL cp_fm_to_cfm(msourcer=amew_dip(i), mtarget=work1_cfm)
1496 osc_str(:) = osc_str(:) + real(transdip(2:ntot, 1))**2 + aimag(transdip(2:ntot, 1))**2
1502 osc_str(:) = 2.0_dp/3.0_dp*soc_evals(:)*osc_str(:)
1504 osc_str(:) = 2.0_dp/3.0_dp*soc_evals(:)*osc_str(:)
1515 DEALLOCATE (amew_dip, transdip)
1517 CALL timestop(handle)
1519 END SUBROUTINE soc_dipol
1532 SUBROUTINE get_rcs_amew_op(amew_op, soc_env, dbcsr_soc_package, eps_filter, qs_env, gs_mos, &
1533 evects_sing, evects_trip)
1535 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:), &
1536 INTENT(OUT) :: amew_op
1538 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
1539 REAL(
dp),
INTENT(IN) :: eps_filter
1543 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
1545 CHARACTER(len=*),
PARAMETER :: routinen =
'get_rcs_amew_op'
1547 INTEGER :: dim_op, handle, i, isg, nactive, nao, &
1550 REAL(
dp) :: op, sqrt2
1551 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) ::
diag, gs_diag, gsgs_op
1552 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: mo_op, sggs_block
1555 std_struct, tmp_struct
1556 TYPE(
cp_fm_type) :: gs_fm, sggs_fm, tmp_fm, vec_op, work_fm
1558 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: ao_op, matrix_s
1559 TYPE(
dbcsr_type),
POINTER :: ao_op_i, dbcsr_ovlp, dbcsr_prod, &
1560 dbcsr_sg, dbcsr_tmp, dbcsr_tp, &
1565 CALL timeset(routinen, handle)
1567 NULLIFY (mos, gs_coeffs)
1569 NULLIFY (para_env, blacs_env)
1570 NULLIFY (full_struct, gsgs_struct, std_struct, tmp_struct, sggs_struct)
1571 NULLIFY (ao_op_i, ao_op)
1572 NULLIFY (dbcsr_tp, dbcsr_sg, dbcsr_ovlp, dbcsr_work, dbcsr_tmp, dbcsr_prod)
1576 IF (
ASSOCIATED(soc_env%dipmat))
THEN
1577 ao_op => soc_env%dipmat
1580 ao_op => soc_env%dipmat_ao
1583 nsg =
SIZE(soc_env%evals_a)
1584 ntp = nsg; nex = nsg
1585 ntot = 1 + nsg + 3*ntp
1587 CALL get_qs_env(qs_env, matrix_s=matrix_s, mos=mos, para_env=para_env, blacs_env=blacs_env)
1588 sqrt2 = sqrt(2.0_dp)
1589 dim_op =
SIZE(ao_op)
1591 dbcsr_sg => dbcsr_soc_package%dbcsr_sg
1592 dbcsr_tp => dbcsr_soc_package%dbcsr_tp
1593 dbcsr_work => dbcsr_soc_package%dbcsr_work
1594 dbcsr_prod => dbcsr_soc_package%dbcsr_prod
1595 dbcsr_ovlp => dbcsr_soc_package%dbcsr_ovlp
1596 dbcsr_tmp => dbcsr_soc_package%dbcsr_tmp
1600 context=blacs_env, para_env=para_env, &
1601 nrow_global=ntot, ncol_global=ntot)
1602 ALLOCATE (amew_op(dim_op))
1608 CALL get_mo_set(mos(1), nao=nao, homo=nactive)
1609 gs_coeffs => gs_mos(1)%mos_occ
1613 context=blacs_env, para_env=para_env, &
1614 nrow_global=nactive, ncol_global=nactive)
1619 ALLOCATE (gsgs_op(dim_op))
1620 ALLOCATE (gs_diag(nactive))
1624 ao_op_i => ao_op(i)%matrix
1627 1.0_dp, gs_coeffs, work_fm, 0.0_dp, gs_fm)
1629 gsgs_op(i) = 2.0_dp*sum(gs_diag)
1632 DEALLOCATE (gs_diag)
1641 context=blacs_env, para_env=para_env, &
1642 nrow_global=nex, ncol_global=nex)
1644 context=blacs_env, para_env=para_env, &
1645 nrow_global=nactive*nsg, ncol_global=nactive)
1651 ALLOCATE (
diag(nactive))
1652 ALLOCATE (mo_op(nactive, nactive))
1653 ALLOCATE (sggs_block(nactive, nactive))
1659 ao_op_i => ao_op(i)%matrix
1670 CALL dip_vel_op(soc_env, qs_env, evects_sing, dbcsr_prod, i, .false., &
1674 1.0_dp, soc_env%a_coeff, vec_op, 0.0_dp, sggs_fm)
1679 target_m=sggs_block, &
1680 start_row=(isg - 1)*nactive + 1, &
1685 op = sqrt2*sum(
diag)
1692 matrix_s(1)%matrix, dbcsr_sg, &
1693 0.0_dp, dbcsr_work, &
1694 filter_eps=eps_filter)
1696 dbcsr_sg, dbcsr_work, &
1697 0.0_dp, dbcsr_ovlp, &
1698 filter_eps=eps_filter)
1701 CALL dip_vel_op(soc_env, qs_env, evects_sing, dbcsr_prod, i, .false.)
1705 ao_op_i, dbcsr_sg, &
1706 0.0_dp, dbcsr_work, &
1707 filter_eps=eps_filter)
1709 dbcsr_sg, dbcsr_work, &
1710 0.0_dp, dbcsr_prod, &
1711 filter_eps=eps_filter)
1719 pref_trace=-1.0_dp, &
1720 pref_overall=1.0_dp, &
1721 pref_diags=gsgs_op(i), &
1726 mtarget=amew_op(i), &
1737 matrix_s(1)%matrix, &
1740 filter_eps=eps_filter)
1742 dbcsr_tp, dbcsr_work, &
1743 0.0_dp, dbcsr_ovlp, &
1744 filter_eps=eps_filter)
1748 CALL dip_vel_op(soc_env, qs_env, evects_trip, dbcsr_prod, i, .true.)
1751 ao_op_i, dbcsr_tp, &
1752 0.0_dp, dbcsr_work, &
1753 filter_eps=eps_filter)
1755 dbcsr_tp, dbcsr_work, &
1756 0.0_dp, dbcsr_prod, &
1757 filter_eps=eps_filter)
1764 pref_trace=-1.0_dp, &
1765 pref_overall=1.0_dp, &
1766 pref_diags=gsgs_op(i), &
1772 mtarget=amew_op(i), &
1777 t_firstrow=1 + nsg + 1, &
1778 t_firstcol=1 + nsg + 1)
1782 mtarget=amew_op(i), &
1787 t_firstrow=1 + nsg + ntp + 1, &
1788 t_firstcol=1 + nsg + ntp + 1)
1791 mtarget=amew_op(i), &
1796 t_firstrow=1 + nsg + 2*ntp + 1, &
1797 t_firstcol=1 + nsg + 2*ntp + 1)
1814 DEALLOCATE (sggs_block)
1815 DEALLOCATE (
diag, gsgs_op, mo_op)
1816 CALL timestop(handle)
1818 END SUBROUTINE get_rcs_amew_op
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
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)
...
methods related to the blacs parallel environment
used for collecting diagonalization schemes available for cp_cfm_type
subroutine, public cp_cfm_heevd(matrix, eigenvectors, eigenvalues)
Perform a diagonalisation of a complex matrix.
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 cp_cfm_create(matrix, matrix_struct, name)
Creates a new full matrix with the given structure.
subroutine, public cp_cfm_release(matrix)
Releases a full matrix.
subroutine, public cp_fm_to_cfm(msourcer, msourcei, mtarget)
Construct a complex full matrix by taking its real and imaginary parts from two separate real-value f...
subroutine, public cp_cfm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, matrix_struct, para_env)
Returns information about a full matrix.
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_distribution_release(dist)
...
subroutine, public dbcsr_scale(matrix, alpha_scalar)
...
subroutine, public dbcsr_distribution_new(dist, template, group, pgrid, row_dist, col_dist, reuse_arrays)
...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_multiply(transa, transb, alpha, matrix_a, matrix_b, beta, matrix_c, first_row, last_row, first_column, last_column, first_k, last_k, retain_sparsity, filter_eps, flop)
...
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_distribution_get(dist, row_dist, col_dist, nrows, ncols, has_threads, group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, subgroups_defined, prow_group, pcol_group)
...
subroutine, public dbcsr_print(matrix, variable_name, unit_nr)
Prints given matrix in matlab format (only present blocks).
subroutine, public dbcsr_reserve_all_blocks(matrix)
Reserves all blocks.
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
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.
basic linear algebra operations for full matrices
subroutine, public cp_fm_transpose(matrix, matrixt)
transposes a matrix matrixt = matrix ^ T
subroutine, public cp_fm_uplo_to_full(matrix, work, uplo)
given a triangular matrix according to uplo, computes the corresponding full matrix
subroutine, public cp_fm_scale(alpha, matrix_a)
scales a matrix matrix_a = alpha * matrix_b
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_release(fmstruct)
releases a full matrix structure
represent a full matrix distributed on many processors
subroutine, public cp_fm_get_diag(matrix, diag)
returns the diagonal elements of a fm
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_to_fm_submat(msource, mtarget, nrow, ncol, s_firstrow, s_firstcol, t_firstrow, t_firstcol)
copy just a part ot the 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_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,...
subroutine, public cp_fm_set_element(matrix, irow_global, icol_global, alpha)
sets an element of a matrix
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
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)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Generation of the spherical Lebedev grids. All Lebedev grids were generated with a precision of at le...
subroutine, public deallocate_lebedev_grids()
...
type(oh_grid), dimension(nlg), target, public lebedev_grid
integer function, public get_number_of_lebedev_grid(l, n)
Get the number of the Lebedev grid, which has the requested angular momentum quantnum number l or siz...
subroutine, public init_lebedev_grids()
Load the coordinates and weights of the nonredundant Lebedev grid points.
Collection of simple mathematical functions and subroutines.
pure real(kind=dp) function, dimension(min(size(a, 1), size(a, 2))), public get_diag(a)
Return the diagonal elements of matrix a as a vector.
subroutine, public diag(n, a, d, v)
Diagonalize matrix a. The eigenvalues are returned in vector d and the eigenvectors are returned in m...
Utility routines for the memory handling.
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nsoset
integer, dimension(:, :), allocatable, public indso
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public evolt
real(kind=dp), parameter, public wavenumbers
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.
subroutine, public allocate_grid_atom(grid_atom)
Initialize components of the grid_atom_type structure.
subroutine, public create_grid_atom(grid_atom, nr, na, llmax, ll, quadrature)
...
subroutine, public allocate_harmonics_atom(harmonics)
Allocate a spherical harmonics set for the atom grid.
subroutine, public get_maxl_cg(harmonics, orb_basis, llmax, max_s_harm)
...
subroutine, public create_harmonics_atom(harmonics, my_cg, na, llmax, maxs, max_s_harm, ll, wa, azi, pol)
...
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, 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, 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)
Get attributes of an atomic kind set.
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.
subroutine, public soc_env_create(soc_env)
...
subroutine, public soc_atom_release(soc_atom_env)
...
subroutine, public soc_atom_create(soc_atom_env)
...
subroutine, public soc_env_release(soc_env)
...
Utilities absorption spectroscopy using TDDFPT with SOC.
subroutine, public soc_dipole_operator(soc_env, tddfpt_control, qs_env, gs_mos)
Build the atomic dipole operator.
subroutine, public resort_evects(evects_cfm, sort)
Used to find out, which state has which spin-multiplicity.
subroutine, public soc_contract_evect(fm_start, fm_res)
...
subroutine, public dip_vel_op(soc_env, qs_env, evec_fm, op, ideriv, tp, gs_coeffs, sggs_fm)
This routine will construct the dipol operator within velocity representation.
subroutine, public tddfpt_soc(qs_env, evals_a, evals_b, evects_a, evects_b, gs_mos)
Perform TDDFPT-SOC calculation.
subroutine, public v_soc_xyz_from_pseudopotential(qs_env, mat_v_soc_xyz)
V^SOC_µν^(α),R = ħ/2 < ϕ_µ cell O | sum_ℓ ΔV_ℓ^SO(r,r') L^(α) | ϕ_ν cell R>, α = x,...
Calculate spherical harmonics.
subroutine, public clebsch_gordon_init(l)
...
subroutine, public clebsch_gordon_deallocate()
...
This module deals with all the integrals done on local atomic grids in xas_tdp. This is mostly used t...
subroutine, public compute_sphi_so(ikind, basis_type, sphi_so, qs_env)
Computes the contraction coefficients to go from spherical orbitals to sgf for a given atomic kind an...
subroutine, public integrate_soc_atoms(matrix_soc, xas_atom_env, qs_env, soc_atom_env)
Computes the SOC matrix elements with respect to the ORB basis set for each atomic kind and put them ...
subroutine, public truncate_radial_grid(grid_atom, max_radius)
Reduces the radial extension of an atomic grid such that it only covers a given radius.
Utilities for X-ray absorption spectroscopy using TDDFPT.
subroutine, public rcs_amew_soc_elements(amew_soc, lr_soc, lr_overlap, domo_soc, pref_trace, pref_overall, pref_diags, symmetric)
Computes the rcs SOC matrix elements between excited states AMEWs based on the LR orbitals.
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
Represent a complex full matrix.
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...
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
Ground state molecular orbitals.