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
571 num_print_exc_descr, print_checkvalue, print_directional_exc_descr, &
572 prefix_output, qs_env)
575 DIMENSION(:) :: exc_descr
576 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:), &
577 INTENT(IN) :: ref_point_multipole
578 INTEGER,
INTENT(IN) :: unit_nr, num_print_exc_descr
579 LOGICAL,
INTENT(IN) :: print_checkvalue, &
580 print_directional_exc_descr
581 CHARACTER(LEN=4),
INTENT(IN) :: prefix_output
584 CHARACTER(LEN=*),
PARAMETER :: routinen =
'print_exciton_descriptors'
586 CHARACTER(LEN=1),
DIMENSION(3) :: array_direction_str
587 CHARACTER(LEN=5) :: method_name
588 INTEGER :: handle, i_dir, i_exc
591 IF (prefix_output ==
'BSE|')
THEN
594 method_name =
'TDDFT'
597 CALL timeset(routinen, handle)
598 CALL get_qs_env(qs_env, particle_set=particle_set)
599 IF (unit_nr > 0)
THEN
600 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
601 'Exciton descriptors for excitation level n are given by'
602 WRITE (unit_nr,
'(T2,A4)') prefix_output
603 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
604 'd_eh = | <r_h - r_e>_exc |'
605 WRITE (unit_nr,
'(T2,A4)') prefix_output
606 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
607 σ
'_e = sqrt( <r_e^2>_exc - <r_e>_exc^2 )'
608 WRITE (unit_nr,
'(T2,A4)') prefix_output
609 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
610 σ
'_h = sqrt( <r_h^2>_exc - <r_h>_exc^2 )'
611 WRITE (unit_nr,
'(T2,A4)') prefix_output
612 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
613 'COV_eh = <r_e r_h>_exc - <r_e>_exc <r_h>_exc'
614 WRITE (unit_nr,
'(T2,A4)') prefix_output
615 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
616 'd_exc = sqrt( | < |r_h - r_e|^2 >_exc )'
617 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
618 σσ
' = sqrt( d_eh^2 + _e^2 + _h^2 - 2 * COV_eh )'
619 WRITE (unit_nr,
'(T2,A4)') prefix_output
620 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
621 σσ
'R_eh = COV_eh / (_e * _h)'
622 WRITE (unit_nr,
'(T2,A4)') prefix_output
623 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
624 'where the expectation values <.>_exc are taken with respect to the '
625 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
626 'exciton wavefunction of excitation n:'
627 WRITE (unit_nr,
'(T2,A4)') prefix_output
629 IF (exc_descr(1)%flag_TDA)
THEN
630 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
631 𝚿Σψψ
'_n(r_e,r_h) = _{i,a} X_ia^n _i(r_h) _a(r_e) ,'
633 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
634 𝚿Σψψ
'_n(r_e,r_h) = _{i,a} X_ia^n _i(r_h) _a(r_e)'
635 WRITE (unit_nr,
'(T2,A4,T40,A)') prefix_output, &
636 ψψ
'+ Y_ia^n _a(r_h) _i(r_e) ,'
638 WRITE (unit_nr,
'(T2,A4)') prefix_output
639 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
641 WRITE (unit_nr,
'(T2,A4)') prefix_output
642 WRITE (unit_nr,
'(T2,A4,T20,A)') prefix_output, &
643 𝚿𝚿𝚿𝚿
'< O >_exc = < _n | O | _n > / < _n | _n > ,'
644 WRITE (unit_nr,
'(T2,A4)') prefix_output
645 IF (exc_descr(1)%flag_TDA)
THEN
646 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
647 𝚿𝚿
'where c_n = < _n | _n > = 1 within TDA.'
649 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
650 𝚿𝚿≥
'where c_n = < _n | _n > 1 without TDA.'
652 WRITE (unit_nr,
'(T2,A4)') prefix_output
653 WRITE (unit_nr,
'(T2,A4)') prefix_output
654 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
655 'Here, we introduced'
656 WRITE (unit_nr,
'(T2,A4)') prefix_output
657 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A)') &
658 prefix_output, ψ
"_i:",
"occupied molecular orbitals,"
659 WRITE (unit_nr,
'(T2,A4,T7,A5,T15,A)') &
660 prefix_output, ψ
"_a:",
"empty molecular orbitals and"
661 WRITE (unit_nr,
'(T2,A4,T9,A2,T14,A)') &
662 prefix_output,
"r:",
"position operator."
663 WRITE (unit_nr,
'(T2,A4)') prefix_output
664 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
665 'Ref.: Eqs. (28)-(32)'
666 WRITE (unit_nr,
'(T2,A4,T7,A,A)') prefix_output, &
667 'Phys. Rev. B 113, 205152 (2026); ', &
668 'https://doi.org/10.1103/38k2-d55h'
669 WRITE (unit_nr,
'(T2,A4)') prefix_output
670 WRITE (unit_nr,
'(T2,A4)') prefix_output
671 IF (exc_descr(1)%flag_TDA)
THEN
672 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
673 'Exciton descriptors from solving the ', method_name,
' within the TDA:'
675 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
676 'Exciton descriptors from solving the ', method_name,
' without the TDA:'
678 WRITE (unit_nr,
'(T2,A4)') prefix_output
679 WRITE (unit_nr,
'(T2,A4,T10,A1,6X,A3,1X,4X,A10,5X,A10,5X,A10,3X,A11,8X,A4)') prefix_output, &
680 'n',
'c_n', Å
'd_eh []', σÅ
'_e []', σÅ
'_h []', Å
'd_exc []',
'R_eh'
681 DO i_exc = 1, num_print_exc_descr
682 WRITE (unit_nr,
'(T2,A4,T7,I4,4X,F5.3,1X,5(2X,F10.4))') &
683 prefix_output, i_exc, exc_descr(i_exc)%norm_XpY, &
684 exc_descr(i_exc)%diff_r_abs*
angstrom, &
686 exc_descr(i_exc)%diff_r_sqr*
angstrom, exc_descr(i_exc)%corr_e_h
688 WRITE (unit_nr,
'(T2,A4)') prefix_output
690 IF (print_checkvalue)
THEN
691 WRITE (unit_nr,
'(T2)')
692 WRITE (unit_nr,
'(T2,A28,T65,F16.4)')
'Checksum exciton descriptors', &
694 WRITE (unit_nr,
'(T2)')
696 WRITE (unit_nr,
'(T2,A4)') prefix_output
698 IF (print_directional_exc_descr)
THEN
699 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
700 'We can restrict the exciton descriptors to a specific direction,'
701 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
702 'e.g. the x-components are:'
703 WRITE (unit_nr,
'(T2,A4)') prefix_output
704 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
705 'd_eh^x = | <x_h - x_e>_exc |'
706 WRITE (unit_nr,
'(T2,A4)') prefix_output
707 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
708 σ
'_e^x = sqrt( <x_e^2>_exc - <x_e>_exc^2 )'
709 WRITE (unit_nr,
'(T2,A4)') prefix_output
710 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
711 σ
'_h^x = sqrt( <x_h^2>_exc - <x_h>_exc^2 )'
712 WRITE (unit_nr,
'(T2,A4)') prefix_output
713 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
714 μμμμμμ
"COV_eh^{'} = <r^_e r^'_h>_exc - <r^_e>_exc <r^'_h>_exc"
715 WRITE (unit_nr,
'(T2,A4)') prefix_output
716 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
717 'd_exc^x = sqrt( | < |x_h - x_e|^2 >_exc )'
718 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
719 σ
' = sqrt( (d_eh^x)^2 + (_e^x)^2'
720 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
721 σ
" + (_h^x)^2 - 2 * (COV_eh^{xx}) )"
722 WRITE (unit_nr,
'(T2,A4)') prefix_output
723 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
724 μμ
"Subsequently, the cross-correlation matrix R_eh^{'} is printed"
725 WRITE (unit_nr,
'(T2,A4)') prefix_output
726 WRITE (unit_nr,
'(T2,A4,T15,A)') prefix_output, &
727 μμμμσμσμ
"R_eh^{'} = COV_eh^{'}/(^_e ^_h) "
728 WRITE (unit_nr,
'(T2,A4)') prefix_output
729 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
730 'Ref.: Eqs. (33)-(36)'
731 WRITE (unit_nr,
'(T2,A4,T7,A,A)') prefix_output, &
732 'Phys. Rev. B 113, 205152 (2026); ', &
733 'https://doi.org/10.1103/38k2-d55h'
734 WRITE (unit_nr,
'(T2,A4)') prefix_output
735 WRITE (unit_nr,
'(T2,A4)') prefix_output
736 IF (exc_descr(1)%flag_TDA)
THEN
737 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
738 'Exciton descriptors per direction from solving the ', method_name,
' within the TDA:'
740 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
741 'Exciton descriptors per direction from solving the ', method_name,
' without the TDA:'
743 WRITE (unit_nr,
'(T2,A4)') prefix_output
744 WRITE (unit_nr,
'(T2,A4,T12,A1,2X,A9,5X,A12,5X,A12,5X,A12,3X,A13)') prefix_output, &
745 'n',
'r = x/y/z', Å
'd_eh^r []', σÅ
'_e^r []', σÅ
'_h^r []', Å
'd_exc^r []'
746 DO i_exc = 1, num_print_exc_descr
748 array_direction_str = [
"x",
"y",
"z"]
749 WRITE (unit_nr,
'(T2,A4,T9,I4,10X,A1,1X,4(4X,F10.4))') &
750 prefix_output, i_exc, array_direction_str(i_dir), &
751 exc_descr(i_exc)%d_eh_dir(i_dir)*
angstrom, &
752 exc_descr(i_exc)%sigma_e_dir(i_dir)*
angstrom, &
753 exc_descr(i_exc)%sigma_h_dir(i_dir)*
angstrom, &
754 exc_descr(i_exc)%d_exc_dir(i_dir)*
angstrom
756 WRITE (unit_nr,
'(T2,A4)') prefix_output
758 WRITE (unit_nr,
'(T2,A4)') prefix_output
759 WRITE (unit_nr,
'(T2,A4)') prefix_output
760 IF (exc_descr(1)%flag_TDA)
THEN
761 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
762 'Crosscorrelation matrix from solving the ', method_name,
' within the TDA:'
764 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
765 'Crosscorrelation matrix from solving the ', method_name,
' without the TDA:'
767 WRITE (unit_nr,
'(T2,A4)') prefix_output
768 WRITE (unit_nr,
'(T2,A4,T12,A1,8X,6(8X,A2))') prefix_output, &
769 'n',
'xx',
'yy',
'zz',
'xy',
'xz',
'yz'
770 DO i_exc = 1, num_print_exc_descr
771 WRITE (unit_nr,
'(T2,A4,T9,I4,8X,6(3X,F7.4),3X,F7.4)') &
772 prefix_output, i_exc, &
773 exc_descr(i_exc)%corr_e_h_matrix(1, 1), &
774 exc_descr(i_exc)%corr_e_h_matrix(2, 2), &
775 exc_descr(i_exc)%corr_e_h_matrix(3, 3), &
776 exc_descr(i_exc)%corr_e_h_matrix(1, 2), &
777 exc_descr(i_exc)%corr_e_h_matrix(1, 3), &
778 exc_descr(i_exc)%corr_e_h_matrix(2, 3)
780 WRITE (unit_nr,
'(T2,A4)') prefix_output
783 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
784 'With the center of charge as reference point r_0,'
785 WRITE (unit_nr,
'(T2,A4,T15,A7,F10.4,A2,F10.4,A2,F10.4,A1)') prefix_output, &
786 'r_0 = (', ref_point_multipole(1)*
angstrom,
', ', ref_point_multipole(2)*
angstrom,
', ', &
787 ref_point_multipole(3)*
angstrom,
')'
788 IF (exc_descr(1)%flag_TDA)
THEN
789 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
790 'we further obtain r_e and r_h from solving the ', method_name,
' within the TDA'
792 WRITE (unit_nr,
'(T2,A4,T7,A,A,A)') prefix_output, &
793 'we further obtain r_e and r_h from solving the ', method_name,
' without the TDA'
795 WRITE (unit_nr,
'(T2,A4)') prefix_output
796 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,13X,A9,13X,A9,13X,A9)') prefix_output, &
797 'Excitation n', Å
'x_e []', Å
'y_e []', Å
'z_e []'
798 DO i_exc = 1, num_print_exc_descr
799 WRITE (unit_nr,
'(T2,A4,T8,I12,1X,3(5X,F15.4))') &
800 prefix_output, i_exc, &
801 exc_descr(i_exc)%r_e_shift(:)*
angstrom
803 WRITE (unit_nr,
'(T2,A4)') prefix_output
804 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,13X,A9,13X,A9,13X,A9)') prefix_output, &
805 'Excitation n', Å
'x_h []', Å
'y_h []', Å
'z_h []'
806 DO i_exc = 1, num_print_exc_descr
807 WRITE (unit_nr,
'(T2,A4,T8,I12,1X,3(5X,F15.4))') &
808 prefix_output, i_exc, &
809 exc_descr(i_exc)%r_h_shift(:)*
angstrom
811 WRITE (unit_nr,
'(T2,A4)') prefix_output
812 WRITE (unit_nr,
'(T2,A4,T7,A)') prefix_output, &
813 'The reference atomic geometry for these values is given by'
815 CALL write_qs_particle_coordinates_bse(particle_set, unit_nr, prefix_output)
816 IF (unit_nr > 0)
THEN
817 WRITE (unit_nr,
'(T2,A4)') prefix_output
819 CALL timestop(handle)
834 REAL(kind=
dp),
INTENT(IN) :: thresh
835 CHARACTER(LEN=*),
INTENT(IN) ::
header
836 INTEGER,
INTENT(IN) :: unit_nr
837 LOGICAL,
OPTIONAL :: abs_vals
839 CHARACTER(LEN=*),
PARAMETER :: my_footer =
" | ENDING WRITING OF MATRIX", &
840 routinen =
'fm_write_thresh'
842 INTEGER :: handle, i, j, ncol_local, nrow_local
843 INTEGER,
DIMENSION(:),
POINTER :: col_indices, row_indices
844 LOGICAL :: my_abs_vals
846 CALL timeset(routinen, handle)
848 IF (
PRESENT(abs_vals))
THEN
849 my_abs_vals = abs_vals
851 my_abs_vals = .false.
855 nrow_local=nrow_local, &
856 ncol_local=ncol_local, &
857 row_indices=row_indices, &
858 col_indices=col_indices)
860 IF (unit_nr > 0)
THEN
863 IF (my_abs_vals)
THEN
866 IF (abs(fm%local_data(i, j)) > thresh)
THEN
867 IF (unit_nr > 0)
THEN
868 WRITE (unit_nr,
"(A7,T10,I5,T20,I5,T30,F13.5)")
header, row_indices(i), col_indices(j), &
869 abs(fm%local_data(i, j))
877 IF (abs(fm%local_data(i, j)) > thresh)
THEN
878 IF (unit_nr > 0)
THEN
879 WRITE (unit_nr,
"(A7,T10,I5,T20,I5,T30,F13.5)")
header, row_indices(i), col_indices(j), &
886 CALL fm%matrix_struct%para_env%sync()
887 IF (unit_nr > 0)
THEN
888 WRITE (unit_nr, *) my_footer
891 CALL timestop(handle)
902 SUBROUTINE write_qs_particle_coordinates_bse(particle_set, unit_nr, prefix_output)
905 INTEGER,
INTENT(IN) :: unit_nr
906 CHARACTER(LEN=4),
INTENT(IN) :: prefix_output
908 CHARACTER(len=*),
PARAMETER :: routinen =
'write_qs_particle_coordinates_bse'
910 CHARACTER(LEN=2) :: element_symbol
911 INTEGER :: handle, iatom, natom
913 CALL timeset(routinen, handle)
915 IF (unit_nr > 0)
THEN
916 WRITE (unit_nr,
'(T2,A4)') prefix_output
917 WRITE (unit_nr,
'(T2,A4,T13,A7,16X,A7,15X,A7,15X,A7)') prefix_output, &
918 'Element', Å
'x []', Å
'y []', Å
'z []'
919 natom =
SIZE(particle_set)
922 element_symbol=element_symbol)
923 WRITE (unit_nr,
'(T2,A4,T8,A12,1X,3(5X,F15.4))') &
924 prefix_output, element_symbol, particle_set(iatom)%r(1:3)*
angstrom
928 CALL timestop(handle)
930 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_exciton_descriptors(exc_descr, ref_point_multipole, unit_nr, num_print_exc_descr, print_checkvalue, print_directional_exc_descr, prefix_output, qs_env)
Prints exciton descriptors, cf. Mewes et al., JCTC 14, 710-725 (2018)
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)
...
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.