35#include "./base/base_uses.f90"
41 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'bse_print'
58 INTEGER,
INTENT(IN) :: unit_nr
60 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_BSE_start_flag'
64 CALL timeset(routinen, handle)
68 WRITE (unit_nr, *)
' '
69 WRITE (unit_nr,
'(T2,A79)')
'*******************************************************************************'
70 WRITE (unit_nr,
'(T2,A79)')
'** **'
71 WRITE (unit_nr,
'(T2,A79)')
'** Bethe Salpeter equation (BSE) for excitation energies **'
73 WRITE (unit_nr,
'(T2,A79)')
'** solved with and without Tamm-Dancoff approximation (TDA) **'
75 WRITE (unit_nr,
'(T2,A79)')
'** solved with Tamm-Dancoff approximation (TDA) **'
77 WRITE (unit_nr,
'(T2,A79)')
'** solved without Tamm-Dancoff approximation (TDA) **'
80 WRITE (unit_nr,
'(T2,A79)')
'** **'
81 WRITE (unit_nr,
'(T2,A79)')
'*******************************************************************************'
82 WRITE (unit_nr, *)
' '
101 multiplet, alpha, mp2_env, unit_nr)
103 INTEGER,
INTENT(IN) :: homo, virtual, homo_irred
104 LOGICAL,
INTENT(IN) :: flag_tda
105 CHARACTER(LEN=10),
INTENT(IN) :: multiplet
106 REAL(kind=
dp),
INTENT(IN) :: alpha
107 TYPE(
mp2_type),
INTENT(INOUT) :: mp2_env
108 INTEGER,
INTENT(IN) :: unit_nr
110 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_output_header'
114 CALL timeset(routinen, handle)
116 IF (unit_nr > 0)
THEN
117 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
118 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
120 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'**************************************************************************'
121 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'* Bethe Salpeter equation (BSE) with Tamm Dancoff approximation (TDA) *'
122 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'**************************************************************************'
123 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
124 WRITE (unit_nr,
'(T2,A4,T7,A48,A23)')
'BSE|',
'The excitations are calculated by diagonalizing ', &
125 'the BSE within the TDA:'
126 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
127 WRITE (unit_nr,
'(T2,A4,T29,A16)')
'BSE|',
'A X^n = Ω^n X^n'
128 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
129 WRITE (unit_nr,
'(T2,A4,T7,A23)')
'BSE|',
'i.e. in index notation:'
130 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
131 WRITE (unit_nr,
'(T2,A4,T7,A41)')
'BSE|',
'sum_jb ( A_ia,jb X_jb^n ) = Ω^n X_ia^n'
132 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
133 WRITE (unit_nr,
'(T2,A4,T7,A14)')
'BSE|',
'Ref.: Eq. (18)'
134 WRITE (unit_nr,
'(T2,A4,T7,A61)')
'BSE|',
'in PRB 113,205152 (2026); https://doi.org/10.1103/38k2-d55h .'
136 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'**************************************************************************'
137 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'* Full ("ABBA") Bethe Salpeter equation (BSE) (i.e. without TDA) *'
138 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'**************************************************************************'
139 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
140 WRITE (unit_nr,
'(T2,A4,T7,A48,A24)')
'BSE|',
'The excitations are calculated by diagonalizing ', &
141 'the BSE without the TDA:'
142 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
143 WRITE (unit_nr,
'(T2,A4,T22,A30)')
'BSE|',
'|A B| |X^n| |1 0| |X^n|'
144 WRITE (unit_nr,
'(T2,A4,T22,A31)')
'BSE|',
'|B A| |Y^n| = Ω^n |0 -1| |Y^n|'
145 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
146 WRITE (unit_nr,
'(T2,A4,T7,A23)')
'BSE|',
'i.e. in index notation:'
147 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
148 WRITE (unit_nr,
'(T2,A4,T7,A62)')
'BSE|',
' sum_jb ( A_ia,jb X_jb^n + B_ia,jb Y_jb^n ) = Ω^n X_ia^n'
149 WRITE (unit_nr,
'(T2,A4,T7,A62)')
'BSE|',
'- sum_jb ( B_ia,jb X_jb^n + A_ia,jb Y_jb^n ) = Ω^n Y_ia^n'
150 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
151 WRITE (unit_nr,
'(T2,A4,T7,A13)')
'BSE|',
'Ref.: Eq. (8)'
152 WRITE (unit_nr,
'(T2,A4,T7,A61)')
'BSE|',
'in PRB 113,205152 (2026); https://doi.org/10.1103/38k2-d55h .'
154 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
155 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
156 WRITE (unit_nr,
'(T2,A4,T7,A4,T18,A42,T70,A1,I4,A1,I4,A1)')
'BSE|',
'i,j:', &
157 'occupied molecular orbitals, i.e. state in',
'[', homo_irred - homo + 1,
',', homo_irred,
']'
158 WRITE (unit_nr,
'(T2,A4,T7,A4,T18,A44,T70,A1,I4,A1,I4,A1)')
'BSE|',
'a,b:', &
159 'unoccupied molecular orbitals, i.e. state in',
'[', homo_irred + 1,
',', homo_irred + virtual,
']'
160 WRITE (unit_nr,
'(T2,A4,T7,A2,T18,A16)')
'BSE|',
'n:',
'Excitation index'
161 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
163 WRITE (unit_nr,
'(T2,A4,T7,A)')
'BSE|',
'A_ia,jb = (ε_a-ε_i) δ_ij δ_ab + α * v_ia,jb - W_ij,ab'
165 WRITE (unit_nr,
'(T2,A4,T7,A)')
'BSE|',
'A_ia,jb = (ε_a-ε_i) δ_ij δ_ab + α * v_ia,jb'
167 IF (.NOT. flag_tda)
THEN
169 WRITE (unit_nr,
'(T2,A4,T7,A)')
'BSE|',
'B_ia,jb = α * v_ia,jb - W_ib,aj'
171 WRITE (unit_nr,
'(T2,A4,T7,A)')
'BSE|',
'B_ia,jb = α * v_ia,jb'
173 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
174 WRITE (unit_nr,
'(T2,A4,T7,A14)')
'BSE|',
'Ref.: Eq. (10)'
175 WRITE (unit_nr,
'(T2,A4,T7,A61)')
'BSE|',
'in PRB 113,205152 (2026); https://doi.org/10.1103/38k2-d55h .'
177 IF (.NOT. flag_tda)
THEN
178 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
179 WRITE (unit_nr,
'(T2,A4,T7,A74)')
'BSE|',
'The BSE is solved for Ω^n and X_ia^n as a hermitian problem, e.g. Eq.(42)'
180 WRITE (unit_nr,
'(T2,A4,T7,A71)')
'BSE|',
'in PRB 92,045209 (2015); http://dx.doi.org/10.1103/PhysRevB.92.045209 .'
182 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
183 WRITE (unit_nr,
'(T2,A4,T7,A7,T31,A23)')
'BSE|',
'ε_...:',
'GW quasiparticle energy'
184 WRITE (unit_nr,
'(T2,A4,T7,A7,T31,A15)')
'BSE|',
'δ_...:',
'Kronecker delta'
185 WRITE (unit_nr,
'(T2,A4,T7,A3,T31,A21)')
'BSE|',
'α:',
'spin-dependent factor (Singlet/Triplet)'
186 WRITE (unit_nr,
'(T2,A4,T7,A6,T30,A34)')
'BSE|',
'v_...:',
'Electron-hole exchange interaction'
188 WRITE (unit_nr,
'(T2,A4,T7,A,T31,A)')
'BSE|',
'W_... = 1/ϵ v_...:', &
189 'Direct interaction screened by '
190 WRITE (unit_nr,
'(T2,A4,T30,A)')
'BSE|', &
191 'dielectric function ϵ(ω=0)'
193 WRITE (unit_nr,
'(T2,A4,T7,A,T30,A)')
'BSE|',
'W_... = v_...:',
'Direct interaction without screening'
195 WRITE (unit_nr,
'(T2,A4,T7,A,T31,A,F5.2)')
'BSE|',
'W_... = γ v_...:', &
196 'Direct interaction with artificial screening γ=', mp2_env%bse%screening_factor
198 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
199 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
200 WRITE (unit_nr,
'(T2,A4,T7,A47,A7,A9,F3.1)')
'BSE|', &
201 'The spin-dependent factor is for the requested ', multiplet,
" is α = ", alpha
202 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
205 CALL timestop(handle)
221 info_approximation, mp2_env, unit_nr)
223 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: exc_ens
224 INTEGER,
INTENT(IN) :: homo, virtual
225 LOGICAL,
INTENT(IN) :: flag_tda
226 CHARACTER(LEN=10),
INTENT(IN) :: multiplet, info_approximation
227 TYPE(
mp2_type),
INTENT(INOUT) :: mp2_env
228 INTEGER,
INTENT(IN) :: unit_nr
230 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_excitation_energies'
232 INTEGER :: handle, i_exc
234 CALL timeset(routinen, handle)
236 IF (unit_nr > 0)
THEN
238 WRITE (unit_nr,
'(T2,A4,T7,A56)')
'BSE|',
'Excitation energies from solving the BSE within the TDA:'
240 WRITE (unit_nr,
'(T2,A4,T7,A57)')
'BSE|',
'Excitation energies from solving the BSE without the TDA:'
242 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
243 WRITE (unit_nr,
'(T2,A4,T11,A12,T30,A7,T44,A8,T55,A27)')
'BSE|', &
244 'Excitation n', multiplet,
'TDA/ABBA',
'Excitation energy Ω^n (eV)'
247 IF (unit_nr > 0)
THEN
248 DO i_exc = 1, min(homo*virtual, mp2_env%bse%num_print_exc)
249 WRITE (unit_nr,
'(T2,A4,T7,I16,T30,A7,T46,A6,T59,F22.4)') &
250 'BSE|', i_exc, multiplet, info_approximation, exc_ens(i_exc)*
evolt
254 CALL timestop(handle)
270 info_approximation, mp2_env, unit_nr, fm_eigvec_Y)
273 INTEGER,
DIMENSION(:),
INTENT(IN) :: homo, virtual, homo_irred
274 CHARACTER(LEN=10),
INTENT(IN) :: info_approximation
275 TYPE(
mp2_type),
INTENT(INOUT) :: mp2_env
276 INTEGER,
INTENT(IN) :: unit_nr
277 TYPE(
cp_fm_type),
INTENT(IN),
OPTIONAL :: fm_eigvec_y
279 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_transition_amplitudes'
281 INTEGER :: handle, i_exc, isp, n_ov_joint, nspins
282 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: n_ov, offsets
284 CALL timeset(routinen, handle)
287 ALLOCATE (n_ov(nspins), offsets(nspins))
290 IF (unit_nr > 0)
THEN
291 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
292 WRITE (unit_nr,
'(T2,A4,T7,A61)') &
293 'BSE|',
"Single-particle transitions are built up by (de-)excitations,"
294 WRITE (unit_nr,
'(T2,A4,T7,A18)') &
295 'BSE|',
"which we denote by"
296 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
297 WRITE (unit_nr,
'(T2,A4,T20,A2,T30,A40)') &
298 'BSE|',
"=>",
"for excitations, i.e. entries of X_ia^n,"
299 WRITE (unit_nr,
'(T2,A4,T20,A2,T30,A42)') &
300 'BSE|',
"<=",
"for deexcitations, i.e. entries of Y_ia^n."
301 WRITE (unit_nr,
'(T2,A4)') &
303 WRITE (unit_nr,
'(T2,A4,T7,A73)') &
304 'BSE|',
"The following single-particle transitions have significant contributions,"
305 WRITE (unit_nr,
'(T2,A4,T7,A16,F5.3,A15,F5.3,A16)') &
306 'BSE|',
"i.e. |X_ia^n| > ", mp2_env%bse%eps_x,
" or |Y_ia^n| > ", &
307 mp2_env%bse%eps_x,
", respectively :"
309 IF (nspins == 1)
THEN
310 WRITE (unit_nr,
'(T2,A4,T15,A27,I5,A13,I5,A3)')
'BSE|',
'-- Quick reminder: HOMO i =', &
311 homo_irred(1),
' and LUMO a =', homo_irred(1) + 1,
" --"
312 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
313 WRITE (unit_nr,
'(T2,A4,T7,A12,T30,A1,T32,A5,T42,A1,T49,A8,T64,A17)') &
314 "BSE|",
"Excitation n",
"i",
"=>/<=",
"a",
'TDA/ABBA',
"|X_ia^n|/|Y_ia^n|"
319 WRITE (unit_nr,
'(T2,A4,T15,A,I2,A,I5,A,I5,A)')
'BSE|', &
320 '-- Quick reminder: σ =', isp,
', HOMO i =', homo_irred(isp), &
321 ' and LUMO a =', homo_irred(isp) + 1,
" --"
323 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
324 WRITE (unit_nr,
'(T2,A4,T7,A12,T22,A,T30,A1,T32,A5,T42,A1,T49,A8,T64,A)') &
325 "BSE|",
"Excitation n",
"σ",
"i",
"=>/<=",
"a",
'TDA/ABBA',
"|X_iaσ^n|/|Y_iaσ^n|"
328 DO i_exc = 1, min(n_ov_joint, mp2_env%bse%num_print_exc)
329 IF (unit_nr > 0)
THEN
330 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
333 CALL print_transition_amplitudes_core(fm_eigvec_x,
"=>", info_approximation, &
334 i_exc, virtual, homo, homo_irred, &
335 unit_nr, mp2_env, offsets)
336 IF (
PRESENT(fm_eigvec_y))
THEN
337 CALL print_transition_amplitudes_core(fm_eigvec_y,
"<=", info_approximation, &
338 i_exc, virtual, homo, homo_irred, &
339 unit_nr, mp2_env, offsets)
343 DEALLOCATE (n_ov, offsets)
344 CALL timestop(handle)
364 homo, virtual, homo_irred, flag_TDA, &
365 info_approximation, mp2_env, unit_nr, open_shell)
367 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: exc_ens, oscill_str
368 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: trans_mom_bse, polarizability_residues
369 INTEGER,
INTENT(IN) :: homo, virtual, homo_irred
370 LOGICAL,
INTENT(IN) :: flag_tda
371 CHARACTER(LEN=10),
INTENT(IN) :: info_approximation
372 TYPE(
mp2_type),
INTENT(INOUT) :: mp2_env
373 INTEGER,
INTENT(IN) :: unit_nr
374 LOGICAL,
INTENT(IN),
OPTIONAL :: open_shell
376 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_optical_properties'
378 INTEGER :: handle, i_exc
379 LOGICAL :: my_open_shell
381 CALL timeset(routinen, handle)
383 my_open_shell = .false.
384 IF (
PRESENT(open_shell)) my_open_shell = open_shell
388 IF (mp2_env%bse%bse_spin_config == 0)
THEN
389 IF (unit_nr > 0)
THEN
390 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
391 WRITE (unit_nr,
'(T2,A4,T7,A60)') &
392 'BSE|',
"Transition moments d_r^n (with r∈(x,y,z), in atomic units)"
393 WRITE (unit_nr,
'(T2,A4,T7,A67)') &
394 'BSE|',
"and oscillator strength f^n of excitation level n are obtained from"
395 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
396 IF (my_open_shell)
THEN
398 WRITE (unit_nr,
'(T2,A4,T10,A)') &
399 'BSE|',
"d_r^n = sum_σ sum_ia < ψ_iσ | r | ψ_aσ > X_iaσ^n"
401 WRITE (unit_nr,
'(T2,A4,T10,A)') &
402 'BSE|',
"d_r^n = sum_σ sum_ia < ψ_iσ | r | ψ_aσ > ( X_iaσ^n + Y_iaσ^n )"
406 WRITE (unit_nr,
'(T2,A4,T10,A)') &
407 'BSE|',
"d_r^n = sqrt(2) sum_ia < ψ_i | r | ψ_a > X_ia^n"
409 WRITE (unit_nr,
'(T2,A4,T10,A)') &
410 'BSE|',
"d_r^n = sum_ia sqrt(2) < ψ_i | r | ψ_a > ( X_ia^n + Y_ia^n )"
413 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
414 WRITE (unit_nr,
'(T2,A4,T14,A)') &
415 'BSE|',
"f^n = 2/3 * Ω^n sum_r∈(x,y,z) ( d_r^n )^2"
416 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
417 WRITE (unit_nr,
'(T2,A4,T7,A19)') &
418 'BSE|',
"where we introduced"
419 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
420 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A28)') &
421 'BSE|',
"ψ_i:",
"occupied molecular orbitals,"
422 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A28)') &
423 'BSE|',
"ψ_a:",
"empty molecular orbitals and"
424 WRITE (unit_nr,
'(T2,A4,T9,A2,T14,A18)') &
425 'BSE|',
"r:",
"position operator."
426 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
427 WRITE (unit_nr,
'(T2,A4,T7,A21)') &
428 'BSE|',
"Ref.: Eqs. (21), (D3)"
429 WRITE (unit_nr,
'(T2,A4,T7,A69)') &
430 'BSE|',
"in Phys. Rev. B 113, 205152 (2026); https://doi.org/10.1103/38k2-d55h"
431 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
433 WRITE (unit_nr,
'(T2,A4,T7,A55)')
'BSE|', &
434 'Optical properties from solving the BSE within the TDA:'
436 WRITE (unit_nr,
'(T2,A4,T7,A56)')
'BSE|', &
437 'Optical properties from solving the BSE without the TDA:'
439 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
440 WRITE (unit_nr,
'(T2,A4,T8,A12,T22,A8,T38,A5,T48,A5,T58,A5,T64,A17)')
'BSE|', &
441 'Excitation n',
"TDA/ABBA",
"d_x^n",
"d_y^n",
"d_z^n",
'Osc. strength f^n'
442 DO i_exc = 1, min(homo*virtual, mp2_env%bse%num_print_exc)
443 WRITE (unit_nr,
'(T2,A4,T8,I12,T24,A6,T35,F8.3,T45,F8.3,T55,F8.3,T65,F16.3)') &
444 'BSE|', i_exc, info_approximation, trans_mom_bse(1, 1, i_exc), trans_mom_bse(2, 1, i_exc), &
445 trans_mom_bse(3, 1, i_exc), oscill_str(i_exc)
447 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
448 WRITE (unit_nr,
'(T2,A4,T7,A)')
'BSE|', &
449 'Check for Thomas-Reiche-Kuhn sum rule'
450 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
451 WRITE (unit_nr,
'(T2,A4,T35,A15)')
'BSE|', &
453 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
456 WRITE (unit_nr,
'(T2,A4,T7,A24,T65,I16)')
'BSE|', &
457 'Number of electrons N_e:', merge(homo_irred, homo_irred*2, my_open_shell)
458 WRITE (unit_nr,
'(T2,A4,T7,A40,T66,F16.3)')
'BSE|', &
459 'Sum over oscillator strengths Σ_n f^n :', sum(oscill_str)
460 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
461 IF (mp2_env%bse%bse_cutoff_occ > 0 .OR. mp2_env%bse%bse_cutoff_empty > 0)
THEN
462 CALL cp_warn(__location__, &
463 "Accuracy of TRK sum rule might suffer from cutoffs.")
468 IF (mp2_env%bse%bse_print_spectrum)
THEN
470 info_approximation, unit_nr, mp2_env)
474 IF (unit_nr > 0)
THEN
475 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
476 WRITE (unit_nr,
'(T2,A4)')
'BSE|'
477 CALL cp_warn(__location__, &
478 "Requested triplet excitation cannot couple to light. "// &
479 "Skipping calculation of transition moments, "// &
480 "oscillator strengths, and spectrum.")
484 CALL timestop(handle)
501 SUBROUTINE print_transition_amplitudes_core(fm_eigvec, direction_excitation, info_approximation, &
502 i_exc, virtual, homo, homo_irred, &
503 unit_nr, mp2_env, offsets)
506 CHARACTER(LEN=2),
INTENT(IN) :: direction_excitation
507 CHARACTER(LEN=10),
INTENT(IN) :: info_approximation
508 INTEGER,
INTENT(IN) :: i_exc
509 INTEGER,
DIMENSION(:),
INTENT(IN) :: virtual, homo, homo_irred
510 INTEGER,
INTENT(IN) :: unit_nr
511 TYPE(
mp2_type),
INTENT(INOUT) :: mp2_env
512 INTEGER,
DIMENSION(:),
INTENT(IN) :: offsets
514 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_transition_amplitudes_core'
515 CHARACTER(LEN=2),
DIMENSION(2),
PARAMETER :: spin_label = [
"α",
"β"]
517 INTEGER :: handle, isp, k, num_entries
518 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: idx_homo, idx_spin, idx_virt
519 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eigvec_entries
523 CALL timeset(routinen, handle)
527 IF (
SIZE(homo) == 1)
THEN
529 i_exc, virtual(1), num_entries, mp2_env)
530 IF (unit_nr > 0)
THEN
531 DO k = 1, num_entries
532 WRITE (unit_nr,
'(T2,A4,T14,I5,T26,I5,T35,A2,T38,I5,T51,A6,T65,F16.4)') &
533 "BSE|", i_exc, homo_irred(1) - homo(1) + idx_homo(k), direction_excitation, &
534 homo_irred(1) + idx_virt(k), info_approximation, abs(eigvec_entries(k))
539 i_exc, virtual(1), num_entries, mp2_env, &
540 offsets=offsets, virtual_per_spin=virtual, idx_spin=idx_spin)
541 IF (unit_nr > 0)
THEN
542 DO k = 1, num_entries
544 WRITE (unit_nr,
'(T2,A4,T14,I5,T22,A2,T26,I5,T35,A2,T38,I5,T51,A6,T65,F16.4)') &
545 "BSE|", i_exc, spin_label(isp), &
546 homo_irred(isp) - homo(isp) + idx_homo(k), direction_excitation, &
547 homo_irred(isp) + idx_virt(k), info_approximation, abs(eigvec_entries(k))
550 DEALLOCATE (idx_spin)
552 DEALLOCATE (idx_homo)
553 DEALLOCATE (idx_virt)
554 DEALLOCATE (eigvec_entries)
555 CALL timestop(handle)
557 END SUBROUTINE print_transition_amplitudes_core
572 num_print_exc_descr, print_checkvalue, print_directional_exc_descr, &
573 print_directional_crosscorrelation, prefix_output, qs_env)
576 DIMENSION(:) :: exc_descr
577 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:), &
578 INTENT(IN) :: ref_point_multipole
579 INTEGER,
INTENT(IN) :: unit_nr, num_print_exc_descr
580 LOGICAL,
INTENT(IN) :: print_checkvalue, print_directional_exc_descr, &
581 print_directional_crosscorrelation
582 CHARACTER(LEN=4),
INTENT(IN) :: prefix_output
585 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_exciton_descriptors'
587 CHARACTER(LEN=1),
DIMENSION(3) :: array_direction_str
588 CHARACTER(LEN=5) :: method_name
589 INTEGER :: handle, i_dir, i_exc
592 IF (prefix_output ==
'BSE|')
THEN
595 method_name =
'TDDFT'
598 CALL timeset(routinen, handle)
599 CALL get_qs_env(qs_env, particle_set=particle_set)
600 IF (unit_nr > 0)
THEN
601 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
602 'Exciton descriptors for excitation level n are given by'
603 WRITE (unit_nr,
'(T2,A4)') prefix_output
604 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
605 'd_eh = | <r_h - r_e>_exc |'
606 WRITE (unit_nr,
'(T2,A4)') prefix_output
607 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
608 'σ_e = sqrt( <r_e^2>_exc - <r_e>_exc^2 )'
609 WRITE (unit_nr,
'(T2,A4)') prefix_output
610 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
611 'σ_h = sqrt( <r_h^2>_exc - <r_h>_exc^2 )'
612 WRITE (unit_nr,
'(T2,A4)') prefix_output
613 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
614 'COV_eh = <r_e r_h>_exc - <r_e>_exc <r_h>_exc'
615 WRITE (unit_nr,
'(T2,A4)') prefix_output
616 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
617 'd_exc = sqrt( | < |r_h - r_e|^2 >_exc )'
618 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
619 ' = sqrt( d_eh^2 + σ_e^2 + σ_h^2 - 2 * COV_eh )'
620 WRITE (unit_nr,
'(T2,A4)') prefix_output
621 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
622 'R_eh = COV_eh / (σ_e * σ_h)'
623 WRITE (unit_nr,
'(T2,A4)') prefix_output
624 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
625 'where the expectation values <.>_exc are taken with respect to the '
626 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
627 'exciton wavefunction of excitation n:'
628 WRITE (unit_nr,
'(T2,A4)') prefix_output
630 IF (exc_descr(1)%flag_TDA)
THEN
631 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
632 '𝚿_n(r_e,r_h) = Σ_{i,a} X_ia^n ψ_i(r_h) ψ_a(r_e) ,'
634 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
635 '𝚿_n(r_e,r_h) = Σ_{i,a} X_ia^n ψ_i(r_h) ψ_a(r_e)'
636 WRITE (unit_nr,
'(T2,A4,T40,A)') prefix_output, &
637 '+ Y_ia^n ψ_a(r_h) ψ_i(r_e) ,'
639 WRITE (unit_nr,
'(T2,A4)') prefix_output
640 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
642 WRITE (unit_nr,
'(T2,A4)') prefix_output
643 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
644 '< O >_exc = < 𝚿_n | O | 𝚿_n > / < 𝚿_n | 𝚿_n > ,'
645 WRITE (unit_nr,
'(T2,A4)') prefix_output
646 IF (exc_descr(1)%flag_TDA)
THEN
647 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
648 'where c_n = < 𝚿_n | 𝚿_n > = 1 within TDA.'
650 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
651 'where c_n = < 𝚿_n | 𝚿_n > ≥ 1 without TDA.'
653 WRITE (unit_nr,
'(T2,A4)') prefix_output
654 WRITE (unit_nr,
'(T2,A4)') prefix_output
655 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
656 'Here, we introduced'
657 WRITE (unit_nr,
'(T2,A4)') prefix_output
658 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A)') &
659 prefix_output,
"ψ_i:",
"occupied molecular orbitals,"
660 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A)') &
661 prefix_output,
"ψ_a:",
"empty molecular orbitals and"
662 WRITE (unit_nr,
'(T2,A4,T9,A2,T14,A)') &
663 prefix_output,
"r:",
"position operator."
664 WRITE (unit_nr,
'(T2,A4)') prefix_output
665 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
666 'Ref.: Eqs. (28)-(32)'
667 WRITE (unit_nr,
'(T2,A4,T7,A,A)') prefix_output, &
668 'Phys. Rev. B 113, 205152 (2026); ', &
669 'https://doi.org/10.1103/38k2-d55h'
670 WRITE (unit_nr,
'(T2,A4)') prefix_output
671 WRITE (unit_nr,
'(T2,A4)') prefix_output
672 IF (exc_descr(1)%flag_TDA)
THEN
673 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
674 'Exciton descriptors from solving the ', method_name,
' within the TDA:'
676 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
677 'Exciton descriptors from solving the ', method_name,
' without the TDA:'
679 WRITE (unit_nr,
'(T2,A4)') prefix_output
680 WRITE (unit_nr,
'(T2,A4,T10,A1,6X,A3,1X,4X,A10,5X,A10,5X,A10,3X,A11,8X,A4)') prefix_output, &
681 'n',
'c_n',
'd_eh [Å]',
'σ_e [Å]',
'σ_h [Å]',
'd_exc [Å]',
'R_eh'
682 DO i_exc = 1, num_print_exc_descr
683 WRITE (unit_nr,
'(T2,A4,T7,I4,4X,F5.3,1X,5(2X,F10.4))') &
684 prefix_output, i_exc, exc_descr(i_exc)%norm_XpY, &
685 exc_descr(i_exc)%diff_r_abs*
angstrom, &
687 exc_descr(i_exc)%diff_r_sqr*
angstrom, exc_descr(i_exc)%corr_e_h
689 WRITE (unit_nr,
'(T2,A4)') prefix_output
691 IF (print_checkvalue)
THEN
692 WRITE (unit_nr,
'(T2)')
693 WRITE (unit_nr,
'(T2,A28,T65,F16.4)')
'Checksum exciton descriptors', &
695 WRITE (unit_nr,
'(T2)')
697 WRITE (unit_nr,
'(T2,A4)') prefix_output
699 IF (print_directional_exc_descr)
THEN
700 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
701 'We can restrict the exciton descriptors to a specific direction,'
702 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
703 'e.g. the x-components are:'
704 WRITE (unit_nr,
'(T2,A4)') prefix_output
705 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
706 'd_eh^x = | <x_h - x_e>_exc |'
707 WRITE (unit_nr,
'(T2,A4)') prefix_output
708 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
709 'σ_e^x = sqrt( <x_e^2>_exc - <x_e>_exc^2 )'
710 WRITE (unit_nr,
'(T2,A4)') prefix_output
711 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
712 'σ_h^x = sqrt( <x_h^2>_exc - <x_h>_exc^2 )'
713 WRITE (unit_nr,
'(T2,A4)') prefix_output
714 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
715 "COV_eh^{μμ'} = <r^μ_e r^μ'_h>_exc - <r^μ_e>_exc <r^μ'_h>_exc"
716 WRITE (unit_nr,
'(T2,A4)') prefix_output
717 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
718 'd_exc^x = sqrt( | < |x_h - x_e|^2 >_exc )'
719 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
720 ' = sqrt( (d_eh^x)^2 + (σ_e^x)^2'
721 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
722 " + (σ_h^x)^2 - 2 * (COV_eh^{xx}) )"
723 WRITE (unit_nr,
'(T2,A4)') prefix_output
724 IF (print_directional_crosscorrelation)
THEN
725 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
726 "Subsequently, the cross-correlation matrix R_eh^{μμ'} is printed"
727 WRITE (unit_nr,
'(T2,A4)') prefix_output
728 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
729 "R_eh^{μμ'} = COV_eh^{μμ'}/(σ^μ_e σ^μ'_h)"
730 WRITE (unit_nr,
'(T2,A4)') prefix_output
731 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
732 "Rows: electron direction μ, columns: hole direction μ',"
733 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
734 "so in general R_eh^{μμ'} ≠ R_eh^{μ'μ}."
735 WRITE (unit_nr,
'(T2,A4)') prefix_output
737 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
738 'Ref.: Eqs. (33)-(36)'
739 WRITE (unit_nr,
'(T2,A4,T7,A,A)') prefix_output, &
740 'Phys. Rev. B 113, 205152 (2026); ', &
741 'https://doi.org/10.1103/38k2-d55h'
742 WRITE (unit_nr,
'(T2,A4)') prefix_output
743 WRITE (unit_nr,
'(T2,A4)') prefix_output
744 IF (exc_descr(1)%flag_TDA)
THEN
745 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
746 'Exciton descriptors per direction from solving the ', method_name,
' within the TDA:'
748 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
749 'Exciton descriptors per direction from solving the ', method_name,
' without the TDA:'
751 WRITE (unit_nr,
'(T2,A4)') prefix_output
752 WRITE (unit_nr,
'(T2,A4,T12,A1,2X,A9,5X,A12,5X,A12,5X,A12,3X,A13)') prefix_output, &
753 'n',
'r = x/y/z',
'd_eh^r [Å]',
'σ_e^r [Å]',
'σ_h^r [Å]',
'd_exc^r [Å]'
754 DO i_exc = 1, num_print_exc_descr
756 array_direction_str = [
"x",
"y",
"z"]
757 WRITE (unit_nr,
'(T2,A4,T9,I4,10X,A1,1X,4(4X,F10.4))') &
758 prefix_output, i_exc, array_direction_str(i_dir), &
759 exc_descr(i_exc)%d_eh_dir(i_dir)*
angstrom, &
760 exc_descr(i_exc)%sigma_e_dir(i_dir)*
angstrom, &
761 exc_descr(i_exc)%sigma_h_dir(i_dir)*
angstrom, &
762 exc_descr(i_exc)%d_exc_dir(i_dir)*
angstrom
764 WRITE (unit_nr,
'(T2,A4)') prefix_output
766 IF (print_directional_crosscorrelation)
THEN
767 WRITE (unit_nr,
'(T2,A4)') prefix_output
768 WRITE (unit_nr,
'(T2,A4)') prefix_output
769 IF (exc_descr(1)%flag_TDA)
THEN
770 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
771 'Crosscorrelation matrix from solving the ', method_name,
' within the TDA:'
773 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
774 'Crosscorrelation matrix from solving the ', method_name,
' without the TDA:'
776 WRITE (unit_nr,
'(T2,A4)') prefix_output
777 WRITE (unit_nr,
'(T2,A4,T12,A1,T23,A3,T44,A1,T62,A1,T80,A1)') prefix_output, &
778 'n',
'e\h',
'x',
'y',
'z'
780 DO i_exc = 1, num_print_exc_descr
781 WRITE (unit_nr,
'(T2,A4,T9,I4,T25,A1,1X,3(11X,F7.4))') prefix_output, i_exc, &
782 array_direction_str(1), exc_descr(i_exc)%corr_e_h_matrix(1, :)
784 WRITE (unit_nr,
'(T2,A4,T25,A1,1X,3(11X,F7.4))') prefix_output, &
785 array_direction_str(i_dir), exc_descr(i_exc)%corr_e_h_matrix(i_dir, :)
787 WRITE (unit_nr,
'(T2,A4)') prefix_output
792 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
793 'With the center of charge as reference point r_0,'
794 WRITE (unit_nr,
'(T2,A4,T15,A7,F10.4,A2,F10.4,A2,F10.4,A1)') prefix_output, &
795 'r_0 = (', ref_point_multipole(1)*
angstrom,
', ', ref_point_multipole(2)*
angstrom,
', ', &
796 ref_point_multipole(3)*
angstrom,
')'
797 IF (exc_descr(1)%flag_TDA)
THEN
798 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
799 'we further obtain r_e and r_h from solving the ', method_name,
' within the TDA'
801 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
802 'we further obtain r_e and r_h from solving the ', method_name,
' without the TDA'
804 WRITE (unit_nr,
'(T2,A4)') prefix_output
805 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,13X,A9,13X,A9,13X,A9)') prefix_output, &
806 'Excitation n',
'x_e [Å]',
'y_e [Å]',
'z_e [Å]'
807 DO i_exc = 1, num_print_exc_descr
808 WRITE (unit_nr,
'(T2,A4,T8,I12,1X,3(5X,F15.4))') &
809 prefix_output, i_exc, &
810 exc_descr(i_exc)%r_e_shift(:)*
angstrom
812 WRITE (unit_nr,
'(T2,A4)') prefix_output
813 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,13X,A9,13X,A9,13X,A9)') prefix_output, &
814 'Excitation n',
'x_h [Å]',
'y_h [Å]',
'z_h [Å]'
815 DO i_exc = 1, num_print_exc_descr
816 WRITE (unit_nr,
'(T2,A4,T8,I12,1X,3(5X,F15.4))') &
817 prefix_output, i_exc, &
818 exc_descr(i_exc)%r_h_shift(:)*
angstrom
820 WRITE (unit_nr,
'(T2,A4)') prefix_output
821 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
822 'The reference atomic geometry for these values is given by'
824 CALL write_qs_particle_coordinates_bse(particle_set, unit_nr, prefix_output)
825 IF (unit_nr > 0)
THEN
826 WRITE (unit_nr,
'(T2,A4)') prefix_output
828 CALL timestop(handle)
843 REAL(kind=
dp),
INTENT(IN) :: thresh
844 CHARACTER(LEN=*),
INTENT(IN) ::
header
845 INTEGER,
INTENT(IN) :: unit_nr
846 LOGICAL,
OPTIONAL :: abs_vals
848 CHARACTER(LEN=*),
PARAMETER :: my_footer =
" | ENDING WRITING OF MATRIX", &
849 routinen =
'fm_write_thresh'
851 INTEGER :: handle, i, j, ncol_local, nrow_local
852 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
853 LOGICAL :: my_abs_vals
855 CALL timeset(routinen, handle)
857 IF (
PRESENT(abs_vals))
THEN
858 my_abs_vals = abs_vals
860 my_abs_vals = .false.
864 nrow_local=nrow_local, &
865 ncol_local=ncol_local, &
866 row_indices=row_indices, &
867 col_indices=col_indices)
869 IF (unit_nr > 0)
THEN
872 IF (my_abs_vals)
THEN
875 IF (abs(fm%local_data(i, j)) > thresh)
THEN
876 IF (unit_nr > 0)
THEN
877 WRITE (unit_nr,
"(A7,T10,I5,T20,I5,T30,F13.5)")
header, row_indices(i), col_indices(j), &
878 abs(fm%local_data(i, j))
886 IF (abs(fm%local_data(i, j)) > thresh)
THEN
887 IF (unit_nr > 0)
THEN
888 WRITE (unit_nr,
"(A7,T10,I5,T20,I5,T30,F13.5)")
header, row_indices(i), col_indices(j), &
895 CALL fm%matrix_struct%para_env%sync()
896 IF (unit_nr > 0)
THEN
897 WRITE (unit_nr, *) my_footer
900 CALL timestop(handle)
911 SUBROUTINE write_qs_particle_coordinates_bse(particle_set, unit_nr, prefix_output)
914 INTEGER,
INTENT(IN) :: unit_nr
915 CHARACTER(LEN=4),
INTENT(IN) :: prefix_output
917 CHARACTER(len=*),
PARAMETER :: routinen =
'write_qs_particle_coordinates_bse'
919 CHARACTER(LEN=2) :: element_symbol
920 INTEGER :: handle, iatom, natom
922 CALL timeset(routinen, handle)
924 IF (unit_nr > 0)
THEN
925 WRITE (unit_nr,
'(T2,A4)') prefix_output
926 WRITE (unit_nr,
'(T2,A4,T13,A7,16X,A7,15X,A7,15X,A7)') prefix_output, &
927 'Element',
'x [Å]',
'y [Å]',
'z [Å]'
928 natom =
SIZE(particle_set)
931 element_symbol=element_symbol)
932 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,3(5X,F15.4))') &
933 prefix_output, element_symbol, particle_set(iatom)%r(1:3)*
angstrom
937 CALL timestop(handle)
939 END SUBROUTINE write_qs_particle_coordinates_bse
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.
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public graml2026
Routines for printing information in context of the BSE calculation.
subroutine, public print_output_header(homo, virtual, homo_irred, flag_tda, multiplet, alpha, mp2_env, unit_nr)
...
subroutine, public print_bse_start_flag(bse_tda, bse_abba, unit_nr)
...
subroutine, public print_optical_properties(exc_ens, oscill_str, trans_mom_bse, polarizability_residues, homo, virtual, homo_irred, flag_tda, info_approximation, mp2_env, unit_nr, open_shell)
...
subroutine, public print_transition_amplitudes(fm_eigvec_x, homo, virtual, homo_irred, info_approximation, mp2_env, unit_nr, fm_eigvec_y)
...
subroutine, public fm_write_thresh(fm, thresh, header, unit_nr, abs_vals)
Debug function to write elements of a full matrix to file, if they are larger than a given threshold.
subroutine, public print_excitation_energies(exc_ens, homo, virtual, flag_tda, multiplet, info_approximation, mp2_env, unit_nr)
...
subroutine, public print_exciton_descriptors(exc_descr, ref_point_multipole, unit_nr, num_print_exc_descr, print_checkvalue, print_directional_exc_descr, print_directional_crosscorrelation, prefix_output, qs_env)
Prints exciton descriptors, cf. Mewes et al., JCTC 14, 710-725 (2018).
Routines for computing excitonic properties, e.g. exciton diameter, from the BSE.
subroutine, public compute_and_print_absorption_spectrum(oscill_str, polarizability_residues, exc_ens, info_approximation, unit_nr, mp2_env)
Computes and returns absorption spectrum for the frequency range and broadening provided by the user....
Auxiliary routines for GW + Bethe-Salpeter for computing electronic excitations.
subroutine, public filter_eigvec_contrib(fm_eigvec, idx_homo, idx_virt, eigvec_entries, i_exc, virtual, num_entries, mp2_env, offsets, virtual_per_spin, idx_spin)
Filters eigenvector entries above a given threshold to describe excitations in the singleparticle bas...
subroutine, public get_bse_spin_block_layout(homo_red, virt_red, n_ov, offsets, n_ov_joint)
Spin-block layout for the open-shell (joint) BSE matrix: per-spin OV-pair counts and the block offset...
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
Defines the basic variable types.
integer, parameter, public dp
Types needed for MP2 calculations.
Define the data structure for the particle information.
Definition of physical constants:
real(kind=dp), parameter, public evolt
real(kind=dp), parameter, public angstrom
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.