90#include "./base/base_uses.f90"
96 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_tddfpt2_soc'
98 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
100 INTEGER,
PARAMETER,
PRIVATE :: nderivs = 3
101 INTEGER,
PARAMETER,
PRIVATE :: maxspins = 2
104 TYPE dbcsr_soc_package_type
105 TYPE(dbcsr_type),
POINTER :: dbcsr_sg => null()
106 TYPE(dbcsr_type),
POINTER :: dbcsr_tp => null()
107 TYPE(dbcsr_type),
POINTER :: dbcsr_sc => null()
108 TYPE(dbcsr_type),
POINTER :: dbcsr_sf => null()
109 TYPE(dbcsr_type),
POINTER :: dbcsr_prod => null()
110 TYPE(dbcsr_type),
POINTER :: dbcsr_ovlp => null()
111 TYPE(dbcsr_type),
POINTER :: dbcsr_tmp => null()
112 TYPE(dbcsr_type),
POINTER :: dbcsr_work => null()
113 END TYPE dbcsr_soc_package_type
135 SUBROUTINE tddfpt_soc(qs_env, evals_a, evals_b, evects_a, evects_b, gs_mos)
138 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: evals_a, evals_b
139 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_a, evects_b
143 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_soc'
145 INTEGER :: handle, istate, log_unit
150 CALL timeset(routinen, handle)
153 IF (logger%para_env%is_source())
THEN
159 IF (log_unit > 0)
THEN
160 WRITE (log_unit,
"(1X,A)")
"", &
161 "-------------------------------------------------------------------------------", &
162 "- START SOC CALCULATIONS -", &
163 "-------------------------------------------------------------------------------"
166 NULLIFY (dft_control)
167 CALL get_qs_env(qs_env, dft_control=dft_control)
168 do_os = dft_control%uks .OR. dft_control%roks
169 IF (do_os) cpabort(
"SOC only implemented for closed shell.")
171 IF (log_unit > 0)
THEN
172 WRITE (log_unit,
'(A)')
" Starting from TDDFPT Excited States:"
173 WRITE (log_unit,
'(A)')
" STATE SINGLET/eV TRIPLET/eV"
174 DO istate = 1,
SIZE(evals_a)
175 WRITE (log_unit,
'(6X,I3,11X,F10.5,6X,F10.5)') istate, evals_a(istate)*
evolt, evals_b(istate)*
evolt
179 IF (log_unit > 0)
WRITE (log_unit,
'(A)')
" Starting restricted closed shell:"
180 CALL tddfpt_soc_rcs(qs_env, evals_a, evals_b, evects_a, evects_b, log_unit, gs_mos)
182 IF (log_unit > 0)
THEN
183 WRITE (log_unit,
'(A,/,A)')
"SOC Calculation terminated", &
184 "Returning to TDDFPT for Force calculation and deallocations"
187 CALL timestop(handle)
204 SUBROUTINE tddfpt_soc_rcs(qs_env, evals_sing, evals_trip, evects_sing, evects_trip, log_unit, gs_mos)
207 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
TARGET :: evals_sing, evals_trip
208 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
213 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tddfpt_soc_rcs'
215 CHARACTER(len=3) :: mult
216 INTEGER :: dipole_form, group, handle, iex, ii, &
217 isg, istate, itp, jj, nactive, nao, &
218 nex, npcols, nprows, nsg, ntot, ntp
219 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: evects_sort
220 INTEGER,
DIMENSION(:),
POINTER :: col_blk_size, col_dist, row_blk_size, &
221 row_dist, row_dist_new
222 INTEGER,
DIMENSION(:, :),
POINTER :: pgrid
223 LOGICAL :: print_ev, print_some, print_splitting, &
225 REAL(
dp) :: eps_filter, soc_gst, sqrt2, unit_scale
226 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) ::
diag, tmp_evals
227 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: img_tmp, real_tmp
228 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: gstp_block, mo_soc_x, mo_soc_y, mo_soc_z
232 vec_struct, work_struct
233 TYPE(
cp_fm_type) :: gstp_fm, img_fm, prod_fm, real_fm, &
234 tmp_fm, vec_soc_x, vec_soc_y, &
236 TYPE(
cp_fm_type),
POINTER :: gs_coeffs, tp_coeffs
240 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
241 TYPE(
dbcsr_type),
POINTER :: dbcsr_dummy, dbcsr_ovlp, dbcsr_prod, &
242 dbcsr_sg, dbcsr_tmp, dbcsr_tp, &
243 dbcsr_work, orb_soc_x, orb_soc_y, &
251 CALL timeset(routinen, handle)
253 NULLIFY (logger, pgrid, row_dist, row_dist_new)
254 NULLIFY (col_dist, col_blk_size, row_blk_size, matrix_s)
255 NULLIFY (gstp_struct, tddfpt_print_section, soc_print_section, soc_section)
264 nsg =
SIZE(evals_sing)
265 ntp =
SIZE(evals_trip)
267 ntot = 1 + nsg + 3*ntp
270 CALL inititialize_soc(qs_env, soc_atom_env, soc_env, &
271 evects_sing, evects_trip, dipole_form, gs_mos)
273 CALL get_qs_env(qs_env, para_env=para_env, blacs_env=blacs_env)
274 nactive = gs_mos(1)%nmo_active
282 NULLIFY (tp_coeffs, orb_soc_x, orb_soc_y, orb_soc_z)
283 tp_coeffs => soc_env%b_coeff
284 soc_env%evals_a => evals_sing
285 soc_env%evals_b => evals_trip
286 orb_soc_x => soc_env%orb_soc(1)%matrix
287 orb_soc_y => soc_env%orb_soc(2)%matrix
288 orb_soc_z => soc_env%orb_soc(3)%matrix
291 NULLIFY (full_struct)
292 CALL cp_fm_struct_create(full_struct, context=blacs_env, para_env=para_env, nrow_global=ntot, ncol_global=ntot)
305 CALL cp_fm_set_element(real_fm, 1 + itp + ntp + nsg, 1 + itp + ntp + nsg, evals_trip(itp))
306 CALL cp_fm_set_element(real_fm, 1 + itp + 2*ntp + nsg, 1 + itp + 2*ntp + nsg, evals_trip(itp))
310 CALL get_qs_env(qs_env, dbcsr_dist=dbcsr_dist)
312 npcols=npcols, nprows=nprows)
313 ALLOCATE (col_dist(nex), row_dist_new(nex))
315 col_dist(iex) =
modulo(npcols - iex, npcols)
316 row_dist_new(iex) =
modulo(nprows - iex, nprows)
318 ALLOCATE (coeffs_dist, prod_dist)
325 ALLOCATE (col_blk_size(nex))
326 col_blk_size = nactive
329 CALL dbcsr_get_info(matrix_s(1)%matrix, row_blk_size=row_blk_size)
332 ALLOCATE (dbcsr_sg, dbcsr_tp, dbcsr_work, dbcsr_ovlp, dbcsr_tmp, dbcsr_prod)
333 CALL dbcsr_create(matrix=dbcsr_sg, name=
"SINGLETS", matrix_type=dbcsr_type_no_symmetry, &
334 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
335 CALL dbcsr_create(matrix=dbcsr_tp, name=
"TRIPLETS", matrix_type=dbcsr_type_no_symmetry, &
336 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
337 CALL dbcsr_create(matrix=dbcsr_work, name=
"WORK", matrix_type=dbcsr_type_no_symmetry, &
338 dist=coeffs_dist, row_blk_size=row_blk_size, col_blk_size=col_blk_size)
339 CALL dbcsr_create(matrix=dbcsr_prod, name=
"PROD", matrix_type=dbcsr_type_no_symmetry, &
340 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
341 CALL dbcsr_create(matrix=dbcsr_ovlp, name=
"OVLP", matrix_type=dbcsr_type_no_symmetry, &
342 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
345 CALL dbcsr_create(matrix=dbcsr_tmp, name=
"TMP", matrix_type=dbcsr_type_no_symmetry, &
346 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
349 IF (debug_this_module)
THEN
350 ALLOCATE (dbcsr_dummy)
351 CALL dbcsr_create(matrix=dbcsr_dummy, name=
"DUMMY", matrix_type=dbcsr_type_no_symmetry, &
352 dist=prod_dist, row_blk_size=col_blk_size, col_blk_size=col_blk_size)
357 dbcsr_soc_package%dbcsr_sg => dbcsr_sg
358 dbcsr_soc_package%dbcsr_tp => dbcsr_tp
359 dbcsr_soc_package%dbcsr_work => dbcsr_work
360 dbcsr_soc_package%dbcsr_ovlp => dbcsr_ovlp
361 dbcsr_soc_package%dbcsr_prod => dbcsr_prod
362 dbcsr_soc_package%dbcsr_tmp => dbcsr_tmp
369 gs_coeffs => gs_mos(1)%mos_active
376 nrow_global=nactive, ncol_global=nactive)
380 nrow_global=nex, ncol_global=nex)
384 IF (log_unit > 0 .AND. debug_this_module)
THEN
385 WRITE (log_unit,
'(A)')
"Starting Precomputations"
396 ALLOCATE (
diag(nactive))
397 ALLOCATE (mo_soc_x(nactive, nactive), mo_soc_y(nactive, nactive), mo_soc_z(nactive, nactive))
402 nactive, nao, 1.0_dp, &
403 gs_coeffs, vec_soc_x, &
409 nactive, nao, 1.0_dp, &
410 gs_coeffs, vec_soc_y, &
416 nactive, nao, 1.0_dp, &
417 gs_coeffs, vec_soc_z, &
424 IF (log_unit > 0 .AND. debug_this_module)
THEN
425 WRITE (log_unit,
'(A)')
"Starting Ground-State contributions..."
431 nrow_global=ntp*nactive, ncol_global=nactive)
433 ALLOCATE (gstp_block(nactive, nactive))
439 nactive, nao, -1.0_dp, &
440 tp_coeffs, vec_soc_x, &
446 start_row=(itp - 1)*nactive + 1, start_col=1, &
447 n_rows=nactive, n_cols=nactive)
456 IF (debug_this_module .AND. (log_unit > 0))
THEN
457 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_x|T^-1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
458 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_x|T^+1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
464 nactive, nao, -1.0_dp, &
465 tp_coeffs, vec_soc_y, &
469 CALL cp_fm_get_submatrix(fm=gstp_fm, target_m=gstp_block, start_row=(itp - 1)*nactive + 1, &
470 start_col=1, n_rows=nactive, n_cols=nactive)
479 IF (debug_this_module .AND. (log_unit > 0))
THEN
480 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_y|T^-1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
481 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_y|T^+1> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
487 nactive, nao, -1.0_dp, &
488 tp_coeffs, vec_soc_z, &
493 target_m=gstp_block, &
494 start_row=(itp - 1)*nactive + 1, &
499 soc_gst = sqrt2*sum(
diag)
503 IF (debug_this_module .AND. (log_unit > 0))
THEN
504 WRITE (log_unit,
"(A,2F18.6)")
"<0|H_z|T> in Hartree / cm^-1", soc_gst, soc_gst*
wavenumbers
520 DEALLOCATE (gstp_block)
522 IF (log_unit > 0 .AND. debug_this_module)
THEN
523 WRITE (log_unit,
'(A)')
"Starting Singlet-Triplet contributions..."
530 matrix_s(1)%matrix, &
533 filter_eps=eps_filter)
537 0.0_dp, dbcsr_ovlp, &
538 filter_eps=eps_filter)
546 filter_eps=eps_filter)
549 dbcsr_work, 0.0_dp, &
551 filter_eps=eps_filter)
559 pref_trace=-1.0_dp, &
560 pref_overall=-0.5_dp*sqrt2)
572 t_firstcol=1 + nsg + 1)
574 IF (debug_this_module)
THEN
575 WRITE (log_unit,
"(/,A)")
"<S|H_x|T^-1> in Hartree / cm^-1"
590 t_firstcol=1 + nsg + 2*ntp + 1)
592 IF (debug_this_module)
THEN
593 WRITE (log_unit,
"(/,A)")
"<S|H_x|T^+1> in Hartree / cm^-1"
602 orb_soc_y, dbcsr_tp, &
603 0.0_dp, dbcsr_work, &
604 filter_eps=eps_filter)
606 dbcsr_sg, dbcsr_work, &
607 0.0_dp, dbcsr_prod, &
608 filter_eps=eps_filter)
615 pref_trace=-1.0_dp, &
616 pref_overall=-0.5_dp*sqrt2)
627 t_firstcol=1 + nsg + 1)
629 IF (debug_this_module)
THEN
630 WRITE (log_unit,
"(/,A)")
"<S|H_y|T^-1> in Hartree / cm^-1"
644 t_firstcol=1 + nsg + 2*ntp + 1)
646 IF (debug_this_module)
THEN
647 WRITE (log_unit,
"(/,A)")
"<S|H_y|T^+1> in Hartree / cm^-1"
655 orb_soc_z, dbcsr_tp, &
656 0.0_dp, dbcsr_work, &
657 filter_eps=eps_filter)
659 dbcsr_sg, dbcsr_work, &
660 0.0_dp, dbcsr_prod, &
661 filter_eps=eps_filter)
667 pref_trace=-1.0_dp, &
679 t_firstcol=1 + nsg + ntp + 1)
681 IF (debug_this_module)
THEN
682 WRITE (log_unit,
"(/,A)")
"<S|H_z|T^0> in Hartree / cm^-1"
688 IF (log_unit > 0 .AND. debug_this_module)
THEN
689 WRITE (log_unit,
'(A)')
"Starting Triplet-Triplet contributions..."
695 matrix_s(1)%matrix, &
698 filter_eps=eps_filter)
700 dbcsr_tp, dbcsr_work, &
701 0.0_dp, dbcsr_ovlp, &
702 filter_eps=eps_filter)
706 orb_soc_x, dbcsr_tp, &
707 0.0_dp, dbcsr_work, &
708 filter_eps=eps_filter)
710 dbcsr_tp, dbcsr_work, &
711 0.0_dp, dbcsr_prod, &
712 filter_eps=eps_filter)
719 pref_overall=-0.5_dp*sqrt2)
729 t_firstrow=1 + nsg + ntp + 1, &
730 t_firstcol=1 + nsg + 2*ntp + 1)
732 IF (debug_this_module)
THEN
733 WRITE (log_unit,
"(/,A)")
"<T^0|H_x|T^+1> in Hartree / cm^-1"
748 t_firstrow=1 + nsg + 1, &
749 t_firstcol=1 + nsg + ntp + 1)
751 IF (debug_this_module)
THEN
752 WRITE (log_unit,
"(/,A)")
"<T^-1|H_x|T^0> in Hartree / cm^-1"
760 orb_soc_y, dbcsr_tp, &
761 0.0_dp, dbcsr_work, &
762 filter_eps=eps_filter)
764 dbcsr_tp, dbcsr_work, &
765 0.0_dp, dbcsr_prod, &
766 filter_eps=eps_filter)
773 pref_overall=0.5_dp*sqrt2)
782 s_firstcol=1, t_firstrow=1 + nsg + ntp + 1, &
783 t_firstcol=1 + nsg + 2*ntp + 1)
785 IF (debug_this_module)
THEN
786 WRITE (log_unit,
"(/,A)")
"<T^0|H_y|T^+1> in Hartree / cm^-1"
800 s_firstcol=1, t_firstrow=1 + nsg + 1, &
801 t_firstcol=1 + nsg + ntp + 1)
803 IF (debug_this_module)
THEN
804 WRITE (log_unit,
"(/,A)")
"<T^0|H_y|T^+1> in Hartree / cm^-1"
812 orb_soc_z, dbcsr_tp, &
813 0.0_dp, dbcsr_work, &
814 filter_eps=eps_filter)
816 dbcsr_tp, dbcsr_work, &
817 0.0_dp, dbcsr_prod, &
818 filter_eps=eps_filter)
835 t_firstrow=1 + nsg + 2*ntp + 1, &
836 t_firstcol=1 + nsg + 2*ntp + 1)
838 IF (debug_this_module)
THEN
839 WRITE (log_unit,
"(/,A)")
"<T^+1|H_z|T^+1> in Hartree / cm^-1"
853 t_firstrow=1 + nsg + 1, &
854 t_firstcol=1 + nsg + 1)
856 IF (debug_this_module)
THEN
857 WRITE (log_unit,
"(/,A)")
"<T^-1|H_z|T^-1> in Hartree / cm^-1"
867 DEALLOCATE (
diag, mo_soc_x, mo_soc_y, mo_soc_z)
869 IF (log_unit > 0)
THEN
870 WRITE (log_unit,
'(A)')
"Diagonlzing SOC-Matrix"
878 IF (logger%para_env%is_source())
THEN
880 tddfpt_print_section, &
882 extension=
".socme", &
883 file_form=
"FORMATTED", &
884 file_action=
"WRITE", &
885 file_status=
"UNKNOWN")
900 ELSE IF (print_ev)
THEN
903 cpwarn(
"No output unit was selected, printout will be in Hartree!")
910 IF (log_unit > 0)
THEN
911 WRITE (log_unit,
'(A)')
"____________________________________________________"
912 WRITE (log_unit,
'(A)')
" FULL SOC-Matrix "
914 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[eV] IMG-PART[eV] "
915 ELSE IF (print_wn)
THEN
916 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[cm-1] IMG-PART[cm-1]"
918 WRITE (log_unit,
'(A)')
"STATE STATE REAL-PART[Hartree] IMG-PART[Hartree]"
920 WRITE (log_unit,
'(A)')
"____________________________________________________"
922 ALLOCATE (real_tmp(ntot, ntot), img_tmp(ntot, ntot))
929 IF (log_unit > 0)
THEN
932 WRITE (unit=log_unit, fmt=
"(I3,5X,I3,5X,f16.8,5X,f16.8)") ii, jj, &
933 real_tmp(ii, jj)*unit_scale, &
934 img_tmp(ii, jj)*unit_scale
937 WRITE (log_unit,
'(A)')
" END SOC-MATRIX "
938 WRITE (log_unit,
'(A)')
"____________________________________________________"
939 WRITE (log_unit,
'(A)')
"____________________________________________________"
941 DEALLOCATE (real_tmp, img_tmp)
948 ALLOCATE (tmp_evals(ntot))
953 ALLOCATE (soc_env%soc_evals(ntot - 1))
954 soc_env%soc_evals(:) = tmp_evals(2:ntot) - tmp_evals(1)
957 IF (logger%para_env%is_source())
THEN
963 IF (log_unit > 0)
THEN
964 WRITE (log_unit,
'(A27,6X,F18.10)')
"Ground state stabilisation:", (soc_env%soc_evals(1)*unit_scale)
965 IF (debug_this_module)
THEN
966 WRITE (log_unit,
'(A)')
"Calculation Dipole Moments"
971 soc_env%evals_a => evals_sing
972 soc_env%evals_b => evals_trip
973 CALL soc_dipol(qs_env, dbcsr_soc_package, soc_env, &
974 evecs_cfm, eps_filter, dipole_form, gs_mos, &
975 evects_sing, evects_trip)
979 IF (logger%para_env%is_source())
THEN
985 IF (log_unit > 0)
THEN
986 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
987 WRITE (log_unit,
'(A)')
"- SOC CORRECTED SPECTRUM -"
988 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
990 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc. energies [eV] Oscillator strengths [a.u.] -"
991 ELSE IF (print_wn)
THEN
992 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc. energies [cm-1] Oscillator strengths [a.u.]-"
994 WRITE (log_unit,
'(A)')
"- STATE SOC-corrected exc.energies [Hartree] Oscillator strengths [a.u.]-"
996 WRITE (log_unit,
'(A)')
"------------------------------------------------------------------------------"
997 DO istate = 1,
SIZE(soc_env%soc_evals)
998 WRITE (log_unit,
'(6X,I5,11X,2F16.5)') istate, soc_env%soc_evals(istate)*unit_scale, &
999 soc_env%soc_osc(istate)
1002 WRITE (log_unit,
'(A,F18.8)')
"TDDFT+SOC : CheckSum (eV) ", sum(soc_env%soc_evals)*
evolt
1008 IF (print_splitting .OR. debug_this_module)
THEN
1010 IF (log_unit > 0)
THEN
1011 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1012 WRITE (log_unit,
'(A)')
"- Splittings -"
1013 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1015 WRITE (log_unit,
'(A)')
"- STATE exc.energies[eV] splittings[eV] -"
1016 ELSE IF (print_wn)
THEN
1017 WRITE (log_unit,
'(A)')
"- STATE exc.energies[cm-1] splittings[cm-1] -"
1019 WRITE (log_unit,
'(A)')
"- STATE exc.energies[Hartree] splittings[Hartree] -"
1021 WRITE (log_unit,
'(A)')
"-----------------------------------------------------------------------------"
1023 DO iex = 1,
SIZE(soc_env%soc_evals)
1024 IF (evects_sort(iex + 1) > nsg + ntp*2 + 1)
THEN
1026 ELSE IF (evects_sort(iex + 1) > nsg + ntp + 1)
THEN
1028 ELSE IF (evects_sort(iex + 1) > nsg + 1)
THEN
1033 IF (mult ==
"T-1")
THEN
1034 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1035 evects_sort(iex + 1) - (1 + nsg), soc_env%soc_evals(iex)*unit_scale, &
1036 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg)))*unit_scale
1037 ELSE IF (mult ==
"T0")
THEN
1038 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1039 evects_sort(iex + 1) - (1 + nsg + ntp), soc_env%soc_evals(iex)*unit_scale, &
1040 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg + ntp)))*unit_scale
1041 ELSE IF (mult ==
"T+1")
THEN
1042 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1043 evects_sort(iex + 1) - (1 + nsg + ntp*2), soc_env%soc_evals(iex)*unit_scale, &
1044 (soc_env%soc_evals(iex) - evals_trip(evects_sort(iex + 1) - (1 + nsg + ntp*2)))*unit_scale
1045 ELSE IF (mult ==
"S ")
THEN
1046 WRITE (log_unit,
"(5X,A,I5,6X,F18.10,6X,F18.10)") mult, &
1047 evects_sort(iex + 1), soc_env%soc_evals(iex)*unit_scale, &
1048 (soc_env%soc_evals(iex) - evals_sing(evects_sort(iex + 1) - 1))*unit_scale
1051 WRITE (log_unit,
'(A)')
"----------------------------------------------------------------------------"
1052 DEALLOCATE (evects_sort)
1069 IF (debug_this_module)
THEN
1071 DEALLOCATE (dbcsr_dummy)
1074 DEALLOCATE (dbcsr_work, dbcsr_prod, dbcsr_ovlp, dbcsr_tmp)
1075 DEALLOCATE (coeffs_dist, prod_dist, col_dist, col_blk_size, row_dist_new)
1076 DEALLOCATE (dbcsr_sg, dbcsr_tp, tmp_evals)
1078 CALL timestop(handle)
1080 END SUBROUTINE tddfpt_soc_rcs
1092 SUBROUTINE inititialize_soc(qs_env, soc_atom_env, soc_env, &
1093 evects_a, evects_b, &
1094 dipole_form, gs_mos)
1099 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_a, evects_b
1100 INTEGER :: dipole_form
1102 INTENT(in) :: gs_mos
1104 CHARACTER(LEN=*),
PARAMETER :: routinen =
'inititialize_soc'
1106 CHARACTER(len=default_string_length), &
1107 ALLOCATABLE,
DIMENSION(:, :) :: grid_info
1108 CHARACTER(len=default_string_length), &
1109 DIMENSION(:),
POINTER :: k_list
1110 INTEGER :: handle, i, ikind, irep, ispin, nactive, &
1111 nao, natom, nkind, nrep, nspins, &
1113 LOGICAL :: all_potential_present, do_os
1116 TYPE(
cp_fm_type),
POINTER :: a_coeff, b_coeff
1122 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1126 CALL timeset(routinen, handle)
1128 NULLIFY (qs_kind_set, particle_set, blacs_env, para_env, &
1129 a_coeff, b_coeff, tddfpt_control, soc_section)
1136 CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, &
1137 mos=mos, natom=natom, &
1138 particle_set=particle_set, blacs_env=blacs_env, &
1139 para_env=para_env, matrix_s=matrix_s, &
1140 dft_control=dft_control)
1143 tddfpt_control => dft_control%tddfpt2_control
1144 dipole_form = tddfpt_control%dipole_form
1150 ALLOCATE (grid_info(nrep, 3))
1156 grid_info(irep, :) = k_list
1161 nspins =
SIZE(evects_a, 1)
1162 DO ispin = 1, nspins
1163 CALL cp_fm_get_info(evects_a(ispin, 1), nrow_global=nao, ncol_global=nactive)
1168 nstates =
SIZE(evects_a, 2)
1170 a_coeff => soc_env%a_coeff
1171 b_coeff => soc_env%b_coeff
1175 nrow_global=nao, ncol_global=nspins*nactive*nstates)
1183 ALLOCATE (soc_env%orb_soc(3))
1185 ALLOCATE (soc_env%orb_soc(i)%matrix)
1192 soc_atom_env%nspins = 2
1194 soc_atom_env%nspins = 1
1197 nkind =
SIZE(qs_kind_set)
1198 ALLOCATE (soc_atom_env%grid_atom_set(nkind))
1199 ALLOCATE (soc_atom_env%harmonics_atom_set(nkind))
1200 ALLOCATE (soc_atom_env%orb_sphi_so(nkind))
1202 CALL get_qs_kind_set(qs_kind_set, all_potential_present=all_potential_present)
1203 IF (.NOT. all_potential_present)
THEN
1209 CALL init_atom_grid(soc_atom_env, grid_info, qs_env)
1212 NULLIFY (soc_atom_env%orb_sphi_so(ikind)%array)
1213 CALL compute_sphi_so(ikind,
"ORB", soc_atom_env%orb_sphi_so(ikind)%array, qs_env)
1216 DEALLOCATE (grid_info)
1218 CALL timestop(handle)
1220 END SUBROUTINE inititialize_soc
1229 SUBROUTINE init_atom_grid(soc_atom_env, grid_info, qs_env)
1232 CHARACTER(len=default_string_length), &
1233 ALLOCATABLE,
DIMENSION(:, :) :: grid_info
1236 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_atom_grid'
1238 CHARACTER(LEN=default_string_length) :: kind_name
1239 INTEGER :: handle, igrid, ikind, la, ll, llmax, &
1240 max_s_harm, max_s_set, maxl, maxlgto, &
1241 maxs, na, nr, quadrature, stat
1242 REAL(
dp) :: kind_radius
1243 REAL(
dp),
DIMENSION(:, :, :),
POINTER :: my_cg
1249 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
1251 CALL timeset(routinen, handle)
1253 NULLIFY (my_cg, qs_kind_set, dft_control, qs_control)
1254 NULLIFY (grid_atom, harmonics, tmp_basis)
1258 qs_kind_set=qs_kind_set, &
1259 dft_control=dft_control)
1262 qs_control => dft_control%qs_control
1265 IF (maxlgto < 0)
THEN
1266 cpabort(
"tmp_basis is not Present!")
1271 max_s_harm =
nsoset(llmax)
1272 max_s_set =
nsoset(maxlgto)
1278 quadrature = qs_control%gapw_control%quadrature
1280 DO ikind = 1,
SIZE(soc_atom_env%grid_atom_set)
1283 NULLIFY (soc_atom_env%grid_atom_set(ikind)%grid_atom)
1284 NULLIFY (soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom)
1287 soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom)
1289 NULLIFY (grid_atom, harmonics)
1290 grid_atom => soc_atom_env%grid_atom_set(ikind)%grid_atom
1291 harmonics => soc_atom_env%harmonics_atom_set(ikind)%harmonics_atom
1300 DO igrid = 1,
SIZE(grid_info, 1)
1301 IF (grid_info(igrid, 1) == kind_name)
THEN
1302 READ (grid_info(igrid, 2), *, iostat=stat) na
1303 IF (stat /= 0) cpabort(
"The 'na' value for the GRID keyword must be an integer")
1304 READ (grid_info(igrid, 3), *, iostat=stat) nr
1305 IF (stat /= 0) cpabort(
"The 'nr' value for the GRID keyword must be an integer")
1313 grid_atom%ng_sphere = na
1318 basis_set=tmp_basis, &
1322 kind_radius=kind_radius)
1335 CALL get_maxl_cg(harmonics, tmp_basis, llmax, max_s_harm)
1341 CALL timestop(handle)
1343 END SUBROUTINE init_atom_grid
1357 SUBROUTINE soc_dipol(qs_env, dbcsr_soc_package, soc_env, &
1358 soc_evecs_cfm, eps_filter, dipole_form, gs_mos, &
1359 evects_sing, evects_trip)
1361 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
1364 REAL(
dp),
INTENT(IN) :: eps_filter
1365 INTEGER :: dipole_form
1368 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
1370 CHARACTER(len=*),
PARAMETER :: routinen =
'soc_dipol'
1372 COMPLEX(dp),
ALLOCATABLE,
DIMENSION(:, :) :: transdip
1373 INTEGER :: handle, i, nosc, ntot
1374 REAL(
dp),
DIMENSION(:),
POINTER :: osc_str, soc_evals
1376 TYPE(
cp_cfm_type) :: dip_cfm, work1_cfm, work2_cfm
1378 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:) :: amew_dip
1381 CALL timeset(routinen, handle)
1383 NULLIFY (para_env, blacs_env, dip_struct, full_struct, osc_str)
1386 CALL get_qs_env(qs_env, para_env=para_env, blacs_env=blacs_env)
1388 soc_evals => soc_env%soc_evals
1389 nosc =
SIZE(soc_evals)
1391 ALLOCATE (soc_env%soc_osc(nosc))
1392 osc_str => soc_env%soc_osc
1397 context=blacs_env, para_env=para_env, &
1398 nrow_global=ntot, ncol_global=1)
1405 ALLOCATE (transdip(ntot, 1))
1407 CALL get_rcs_amew_op(amew_dip, soc_env, dbcsr_soc_package, &
1408 eps_filter, qs_env, gs_mos, &
1409 evects_sing, evects_trip)
1414 CALL cp_fm_to_cfm(msourcer=amew_dip(i), mtarget=work1_cfm)
1435 osc_str(:) = osc_str(:) + real(transdip(2:ntot, 1))**2 + aimag(transdip(2:ntot, 1))**2
1441 osc_str(:) = 2.0_dp/3.0_dp*soc_evals(:)*osc_str(:)
1443 osc_str(:) = 2.0_dp/3.0_dp*soc_evals(:)*osc_str(:)
1454 DEALLOCATE (amew_dip, transdip)
1456 CALL timestop(handle)
1458 END SUBROUTINE soc_dipol
1471 SUBROUTINE get_rcs_amew_op(amew_op, soc_env, dbcsr_soc_package, eps_filter, qs_env, gs_mos, &
1472 evects_sing, evects_trip)
1474 TYPE(
cp_fm_type),
ALLOCATABLE,
DIMENSION(:), &
1475 INTENT(OUT) :: amew_op
1477 TYPE(dbcsr_soc_package_type) :: dbcsr_soc_package
1478 REAL(
dp),
INTENT(IN) :: eps_filter
1482 TYPE(
cp_fm_type),
DIMENSION(:, :),
INTENT(IN) :: evects_sing, evects_trip
1484 CHARACTER(len=*),
PARAMETER :: routinen =
'get_rcs_amew_op'
1486 INTEGER :: dim_op, handle, i, isg, nactive, nao, &
1489 REAL(
dp) :: op, sqrt2
1490 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) ::
diag, gs_diag, gsgs_op
1491 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: mo_op, sggs_block
1494 std_struct, tmp_struct
1495 TYPE(
cp_fm_type) :: gs_fm, sggs_fm, tmp_fm, vec_op, work_fm
1497 TYPE(
dbcsr_p_type),
DIMENSION(:),
POINTER :: ao_op, matrix_s
1498 TYPE(
dbcsr_type),
POINTER :: ao_op_i, dbcsr_ovlp, dbcsr_prod, &
1499 dbcsr_sg, dbcsr_tmp, dbcsr_tp, &
1503 CALL timeset(routinen, handle)
1507 NULLIFY (para_env, blacs_env)
1508 NULLIFY (full_struct, gsgs_struct, std_struct, tmp_struct, sggs_struct)
1509 NULLIFY (ao_op_i, ao_op)
1510 NULLIFY (dbcsr_tp, dbcsr_sg, dbcsr_ovlp, dbcsr_work, dbcsr_tmp, dbcsr_prod)
1514 IF (
ASSOCIATED(soc_env%dipmat))
THEN
1515 ao_op => soc_env%dipmat
1518 ao_op => soc_env%dipmat_ao
1521 nsg =
SIZE(soc_env%evals_a)
1522 ntp = nsg; nex = nsg
1523 ntot = 1 + nsg + 3*ntp
1525 CALL get_qs_env(qs_env, matrix_s=matrix_s, para_env=para_env, blacs_env=blacs_env)
1526 sqrt2 = sqrt(2.0_dp)
1527 dim_op =
SIZE(ao_op)
1529 dbcsr_sg => dbcsr_soc_package%dbcsr_sg
1530 dbcsr_tp => dbcsr_soc_package%dbcsr_tp
1531 dbcsr_work => dbcsr_soc_package%dbcsr_work
1532 dbcsr_prod => dbcsr_soc_package%dbcsr_prod
1533 dbcsr_ovlp => dbcsr_soc_package%dbcsr_ovlp
1534 dbcsr_tmp => dbcsr_soc_package%dbcsr_tmp
1538 context=blacs_env, para_env=para_env, &
1539 nrow_global=ntot, ncol_global=ntot)
1540 ALLOCATE (amew_op(dim_op))
1542 CALL cp_fm_create(amew_op(i), full_struct, set_zero=.true.)
1546 nactive = gs_mos(1)%nmo_active
1547 gs_coeffs => gs_mos(1)%mos_active
1548 CALL cp_fm_get_info(gs_coeffs, matrix_struct=std_struct, nrow_global=nao)
1551 context=blacs_env, para_env=para_env, &
1552 nrow_global=nactive, ncol_global=nactive)
1557 ALLOCATE (gsgs_op(dim_op))
1558 ALLOCATE (gs_diag(nactive))
1562 ao_op_i => ao_op(i)%matrix
1565 1.0_dp, gs_coeffs, work_fm, 0.0_dp, gs_fm)
1567 gsgs_op(i) = 2.0_dp*sum(gs_diag)
1570 DEALLOCATE (gs_diag)
1579 context=blacs_env, para_env=para_env, &
1580 nrow_global=nex, ncol_global=nex)
1582 context=blacs_env, para_env=para_env, &
1583 nrow_global=nactive*nsg, ncol_global=nactive)
1589 ALLOCATE (
diag(nactive))
1590 ALLOCATE (mo_op(nactive, nactive))
1591 ALLOCATE (sggs_block(nactive, nactive))
1597 ao_op_i => ao_op(i)%matrix
1608 CALL dip_vel_op(soc_env, qs_env, evects_sing, dbcsr_prod, i, .false., &
1612 1.0_dp, soc_env%a_coeff, vec_op, 0.0_dp, sggs_fm)
1617 target_m=sggs_block, &
1618 start_row=(isg - 1)*nactive + 1, &
1623 op = sqrt2*sum(
diag)
1630 matrix_s(1)%matrix, dbcsr_sg, &
1631 0.0_dp, dbcsr_work, &
1632 filter_eps=eps_filter)
1634 dbcsr_sg, dbcsr_work, &
1635 0.0_dp, dbcsr_ovlp, &
1636 filter_eps=eps_filter)
1639 CALL dip_vel_op(soc_env, qs_env, evects_sing, dbcsr_prod, i, .false.)
1643 ao_op_i, dbcsr_sg, &
1644 0.0_dp, dbcsr_work, &
1645 filter_eps=eps_filter)
1647 dbcsr_sg, dbcsr_work, &
1648 0.0_dp, dbcsr_prod, &
1649 filter_eps=eps_filter)
1657 pref_trace=-1.0_dp, &
1658 pref_overall=1.0_dp, &
1659 pref_diags=gsgs_op(i), &
1664 mtarget=amew_op(i), &
1675 matrix_s(1)%matrix, &
1678 filter_eps=eps_filter)
1680 dbcsr_tp, dbcsr_work, &
1681 0.0_dp, dbcsr_ovlp, &
1682 filter_eps=eps_filter)
1686 CALL dip_vel_op(soc_env, qs_env, evects_trip, dbcsr_prod, i, .true.)
1689 ao_op_i, dbcsr_tp, &
1690 0.0_dp, dbcsr_work, &
1691 filter_eps=eps_filter)
1693 dbcsr_tp, dbcsr_work, &
1694 0.0_dp, dbcsr_prod, &
1695 filter_eps=eps_filter)
1702 pref_trace=-1.0_dp, &
1703 pref_overall=1.0_dp, &
1704 pref_diags=gsgs_op(i), &
1710 mtarget=amew_op(i), &
1715 t_firstrow=1 + nsg + 1, &
1716 t_firstcol=1 + nsg + 1)
1720 mtarget=amew_op(i), &
1725 t_firstrow=1 + nsg + ntp + 1, &
1726 t_firstcol=1 + nsg + ntp + 1)
1729 mtarget=amew_op(i), &
1734 t_firstrow=1 + nsg + 2*ntp + 1, &
1735 t_firstcol=1 + nsg + 2*ntp + 1)
1752 DEALLOCATE (sggs_block)
1753 DEALLOCATE (
diag, gsgs_op, mo_op)
1754 CALL timestop(handle)
1756 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, ccon)
...
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_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_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
Creates a new full matrix with the given structure.
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, 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.
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_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_get_diag(matrix, diag, n_active)
returns the diagonal elements of a fm
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_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
creates a new full matrix with the given structure
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
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, file_access)
...
Expansion of the product of two real spherical harmonics in real spherical harmonics.
subroutine, public real_gaunt_coefficients(my_cg, maxl1, maxl2, llmax, cg_none0_list, ncg_none0)
Calculate the expansion of the product of two real spherical harmonics in real spherical harmonics,...
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...
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nsoset
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, 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.
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, 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 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,...
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.