(git:97501a3)
Loading...
Searching...
No Matches
rixs_methods.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Methods for Resonant Inelastic XRAY Scattering (RIXS) calculations
10!> \author BSG (02.2025)
11! **************************************************************************************************
13 USE bibliography, ONLY: vazdacruz2021,&
14 cite_reference
21 USE cp_dbcsr_api, ONLY: dbcsr_p_type,&
27 USE cp_fm_types, ONLY: cp_fm_create,&
38 USE header, ONLY: rixs_header
41 USE kinds, ONLY: dp
44 USE physcon, ONLY: evolt
47 USE qs_tddfpt2_methods, ONLY: tddfpt
48 USE rixs_types, ONLY: rixs_env_create,&
52 USE xas_tdp_methods, ONLY: xas_tdp
55#include "./base/base_uses.f90"
56
57 IMPLICIT NONE
58 PRIVATE
59
60 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'rixs_methods'
61
62 PUBLIC :: rixs, rixs_core
63
64CONTAINS
65
66! **************************************************************************************************
67!> \brief Driver for RIXS calculations.
68!> \param qs_env the inherited qs_environment
69!> \author BSG
70! **************************************************************************************************
71
72 SUBROUTINE rixs(qs_env)
73
74 TYPE(qs_environment_type), POINTER :: qs_env
75
76 CHARACTER(len=*), PARAMETER :: routinen = 'rixs'
77
78 INTEGER :: handle, output_unit
79 TYPE(dft_control_type), POINTER :: dft_control
80 TYPE(section_vals_type), POINTER :: rixs_section, tddfp2_section, &
81 xas_tdp_section
82
83 CALL timeset(routinen, handle)
84
85 NULLIFY (rixs_section)
86 rixs_section => section_vals_get_subs_vals(qs_env%input, "PROPERTIES%RIXS")
87 output_unit = cp_logger_get_default_io_unit()
88
89 qs_env%do_rixs = .true.
90
91 CALL cite_reference(vazdacruz2021)
92
93 CALL get_qs_env(qs_env, dft_control=dft_control)
94 IF (dft_control%uks .OR. dft_control%roks) cpabort("RIXS not implemented for LSD/ROKS")
95
96 xas_tdp_section => section_vals_get_subs_vals(rixs_section, "XAS_TDP")
97 tddfp2_section => section_vals_get_subs_vals(rixs_section, "TDDFPT")
98
99 IF (.NOT. ASSOCIATED(xas_tdp_section)) THEN
100 cpabort("XAS_TDP calculation missing")
101 END IF
102 IF (.NOT. ASSOCIATED(tddfp2_section)) THEN
103 cpabort("TDDFPT calculation missing")
104 END IF
105
106 CALL rixs_core(rixs_section, qs_env)
107
108 IF (output_unit > 0) THEN
109 WRITE (unit=output_unit, fmt="(/,(T2,A79))") &
110 "*******************************************************************************", &
111 "! Normal termination of Resonant Inelastic X-RAY Scattering calculation !", &
112 "*******************************************************************************"
113 END IF
114
115 CALL timestop(handle)
116
117 END SUBROUTINE rixs
118
119! **************************************************************************************************
120!> \brief Perform RIXS calculation.
121!> \param rixs_section ...
122!> \param qs_env ...
123! **************************************************************************************************
124 SUBROUTINE rixs_core(rixs_section, qs_env)
125
126 TYPE(section_vals_type), POINTER :: rixs_section
127 TYPE(qs_environment_type), POINTER :: qs_env
128
129 CHARACTER(len=*), PARAMETER :: routinen = 'rixs_core'
130
131 INTEGER :: ax, current_state_index, fstate, handle, &
132 iatom, istate, nao, nex_atoms, nocc, &
133 nstates, nvirt, output_unit, td_state
134 REAL(dp) :: osc_xyz
135 REAL(dp), ALLOCATABLE, DIMENSION(:) :: w_i0, w_if
136 REAL(dp), ALLOCATABLE, DIMENSION(:, :) :: dip_block, mu_i0
137 REAL(dp), ALLOCATABLE, DIMENSION(:, :, :) :: mu_if
138 TYPE(cp_blacs_env_type), POINTER :: blacs_env
139 TYPE(cp_fm_struct_type), POINTER :: dip_0_struct, dip_f_struct, &
140 i_dip_0_struct, i_dip_f_struct
141 TYPE(cp_fm_type) :: dip_0, dip_f, i_dip_0, i_dip_f
142 TYPE(cp_fm_type), DIMENSION(:, :), POINTER :: valence_evects
143 TYPE(cp_fm_type), POINTER :: core_evects, local_gs_coeffs, mo_coeffs
144 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: dipmat, matrix_s
145 TYPE(dft_control_type), POINTER :: dft_control
146 TYPE(donor_state_type), POINTER :: current_state
147 TYPE(mp_para_env_type), POINTER :: para_env
148 TYPE(rixs_control_type), POINTER :: rixs_control
149 TYPE(rixs_env_type), POINTER :: rixs_env
150 TYPE(tddfpt2_valence_type), POINTER :: valence_state
151 TYPE(xas_tdp_env_type), POINTER :: core_state
152
153 NULLIFY (rixs_control, dft_control, rixs_env)
154 NULLIFY (valence_state, core_state)
155 NULLIFY (para_env, blacs_env)
156 NULLIFY (local_gs_coeffs, mo_coeffs, valence_evects)
157 NULLIFY (dipmat, dip_0_struct, i_dip_0_struct, dip_f_struct, i_dip_f_struct)
158
159 output_unit = cp_logger_get_default_io_unit()
160
161 CALL get_qs_env(qs_env, &
162 dft_control=dft_control, &
163 matrix_s=matrix_s, &
164 para_env=para_env, &
165 blacs_env=blacs_env)
166 CALL rixs_control_create(rixs_control)
167 CALL read_rixs_control(rixs_control, rixs_section, dft_control%qs_control)
168
169 ! create rixs_env
170 CALL rixs_env_create(rixs_env)
171
172 ! first, xas_tdp calculation
173 CALL xas_tdp(qs_env, rixs_env)
174
175 IF (rixs_control%xas_tdp_control%check_only) THEN
176 cpwarn("CHECK_ONLY run for XAS_TDP requested, RIXS will not be performed.")
177 ELSE
178
179 ! then, tddfpt2 calculation
180 CALL tddfpt(qs_env, calc_forces=.false., rixs_env=rixs_env)
181
182 IF (output_unit > 0) THEN
183 CALL rixs_header(output_unit)
184 END IF
185
186 ! timings for rixs only, excluding xas_tdp and tddft calls
187 CALL timeset(routinen, handle)
188
189 core_state => rixs_env%core_state
190 valence_state => rixs_env%valence_state
191
192 ! gs coefficients from tddfpt
193 mo_coeffs => valence_state%mos_occ(1)
194 ! localised gs coefficients from xas_tdp
195 local_gs_coeffs => core_state%mo_coeff(1) ! TODO (1)=ispin
196 valence_evects => valence_state%evects
197
198 IF (rixs_control%xas_tdp_control%do_loc) THEN
199 IF (output_unit > 0) THEN
200 WRITE (unit=output_unit, fmt="(T2,A)") &
201 "RIXS| Found localised XAS_TDP orbitals"
202 WRITE (unit=output_unit, fmt="(T2,A)") &
203 "RIXS| Rotating TDDFPT vectors..."
204 END IF
205 CALL rotate_vectors(valence_evects, local_gs_coeffs, mo_coeffs, matrix_s(1)%matrix, output_unit)
206 END IF
207
208 CALL cp_fm_get_info(matrix=valence_evects(1, 1), nrow_global=nao, ncol_global=nocc) ! TODO evects
209
210 nex_atoms = core_state%nex_atoms
211 nstates = valence_state%nstates
212
213 dipmat => core_state%dipmat
214
215 nvirt = core_state%nvirt
216 ALLOCATE (dip_block(1, 1))
217
218 ALLOCATE (mu_i0(4, nvirt))
219 mu_i0 = 0.0_dp
220
221 ALLOCATE (mu_if(4, nvirt, nstates)) ! mu per (donor state -> nstate) per (x,y,z) ! experimental
222 mu_if = 0.0_dp
223
224 ALLOCATE (w_i0(nvirt), w_if(nstates))
225 w_if(:) = valence_state%evals(:)*evolt
226
227 ! initialise matrices for i->0
228 CALL cp_fm_struct_create(dip_0_struct, para_env=para_env, context=blacs_env, &
229 nrow_global=nao, ncol_global=1)
230 CALL cp_fm_create(dip_0, dip_0_struct)
231 CALL cp_fm_struct_create(i_dip_0_struct, para_env=para_env, context=blacs_env, &
232 nrow_global=nvirt, ncol_global=1)
233 CALL cp_fm_create(i_dip_0, i_dip_0_struct)
234
235 ! initialise matrices for i->f
236 CALL cp_fm_struct_create(dip_f_struct, para_env=para_env, context=blacs_env, &
237 nrow_global=nao, ncol_global=nocc)
238 CALL cp_fm_create(dip_f, dip_f_struct)
239 CALL cp_fm_struct_create(i_dip_f_struct, para_env=para_env, context=blacs_env, &
240 nrow_global=nvirt, ncol_global=nocc)
241 CALL cp_fm_create(i_dip_f, i_dip_f_struct)
242
243 ! looping over ex_atoms and ex_kinds is enough as excited atoms have to be unique
244 current_state_index = 1
245 DO iatom = 1, nex_atoms
246 current_state => core_state%donor_states(current_state_index)
247 IF (output_unit > 0) THEN
248 WRITE (unit=output_unit, fmt="(T2,A,A,A,A)") &
249 "RIXS| Calculating dipole moment from core-excited state ", &
250 core_state%state_type_char(current_state%state_type), " of ", trim(current_state%at_symbol)
251 END IF
252
253 core_evects => current_state%sg_coeffs
254
255 w_i0(:) = current_state%sg_evals(:)*evolt
256
257 ! 0 -> i
258 DO ax = 1, 3
259
260 ! R*0
261 CALL cp_dbcsr_sm_fm_multiply(dipmat(ax)%matrix, current_state%gs_coeffs, dip_0, ncol=1)
262
263 ! i*R*0
264 CALL parallel_gemm('T', 'N', nvirt, 1, nao, 1.0_dp, core_evects, dip_0, 0.0_dp, i_dip_0)
265
266 DO istate = 1, nvirt
267 CALL cp_fm_get_submatrix(fm=i_dip_0, target_m=dip_block, start_row=istate, &
268 start_col=1, n_rows=1, n_cols=1)
269 mu_i0(ax, istate) = dip_block(1, 1)
270 osc_xyz = mu_i0(ax, istate)**2
271 mu_i0(4, istate) = mu_i0(4, istate) + osc_xyz
272 END DO ! istate
273
274 END DO ! ax
275
276 ! i -> f
277 DO td_state = 1, nstates
278
279 IF (output_unit > 0) THEN
280 WRITE (unit=output_unit, fmt="(T9,A,I3,A,F10.4)") &
281 "to valence-excited state ", td_state, " with energy ", w_if(td_state)
282 END IF
283
284 DO ax = 1, 3
285 ! core_evects x dipmat x valence_evects
286 CALL cp_dbcsr_sm_fm_multiply(dipmat(ax)%matrix, valence_evects(1, td_state), dip_f, ncol=nocc)
287 CALL parallel_gemm('T', 'N', nvirt, nocc, nao, 1.0_dp, core_evects, dip_f, 0.0_dp, i_dip_f)
288
289 DO istate = 1, nvirt
290
291 DO fstate = 1, nocc ! 5
292 CALL cp_fm_get_submatrix(fm=i_dip_f, target_m=dip_block, start_row=istate, &
293 start_col=fstate, n_rows=1, n_cols=1)
294 mu_if(ax, istate, td_state) = mu_if(ax, istate, td_state) + dip_block(1, 1)
295 END DO ! fstate (tddft)
296
297 osc_xyz = mu_if(ax, istate, td_state)**2
298 mu_if(4, istate, td_state) = mu_if(4, istate, td_state) + osc_xyz
299
300 END DO ! istate (core)
301
302 END DO ! ax
303
304 END DO ! td_state
305
306 IF (output_unit > 0) THEN
307 WRITE (unit=output_unit, fmt="(/,T2,A,/)") "RIXS| Printing spectrum to file"
308 END IF
309 CALL print_rixs_to_file(current_state, mu_i0, mu_if, w_i0, w_if, rixs_env, rixs_section)
310
311 current_state_index = current_state_index + 1
312 END DO ! iatom
313
314 NULLIFY (current_state)
315
316 ! cleanup
317 CALL cp_fm_struct_release(i_dip_0_struct)
318 CALL cp_fm_struct_release(dip_0_struct)
319 CALL cp_fm_release(dip_0)
320 CALL cp_fm_release(i_dip_0)
321 CALL cp_fm_struct_release(i_dip_f_struct)
322 CALL cp_fm_struct_release(dip_f_struct)
323 CALL cp_fm_release(dip_f)
324 CALL cp_fm_release(i_dip_f)
325 END IF
326
327 ! nullify rixs_control, rixs_env
328 CALL rixs_control_release(rixs_control)
329 CALL rixs_env_release(rixs_env)
330
331 NULLIFY (valence_state, core_state)
332
333 CALL timestop(handle)
334
335 END SUBROUTINE rixs_core
336
337! **************************************************************************************************
338!> \brief Rotate vectors. Returns rotated mo_occ and evects.
339!> \param evects ...
340!> \param mo_ref ...
341!> \param mo_occ ...
342!> \param overlap_matrix ...
343!> \param unit_nr ...
344! **************************************************************************************************
345
346 SUBROUTINE rotate_vectors(evects, mo_ref, mo_occ, overlap_matrix, unit_nr)
347 TYPE(cp_fm_type), DIMENSION(:, :) :: evects
348 TYPE(cp_fm_type) :: mo_ref, mo_occ
349 TYPE(dbcsr_type), POINTER :: overlap_matrix
350 INTEGER :: unit_nr
351
352 INTEGER :: istate, ncol, nrow, nstates
353 REAL(kind=dp) :: diff
354 TYPE(cp_blacs_env_type), POINTER :: blacs_env
355 TYPE(cp_fm_struct_type), POINTER :: emat_struct
356 TYPE(cp_fm_type) :: emat, rotated_mo_coeffs, smo
357 TYPE(cp_fm_type), POINTER :: current_evect
358 TYPE(mp_para_env_type), POINTER :: para_env
359
360 NULLIFY (emat_struct, para_env, blacs_env, current_evect)
361
362 CALL cp_fm_get_info(matrix=mo_occ, nrow_global=nrow, ncol_global=ncol, &
363 para_env=para_env, context=blacs_env)
364 CALL cp_fm_create(smo, mo_occ%matrix_struct)
365
366 ! rotate mo_occ
367 ! smo = matrix_s x mo_occ
368 CALL cp_dbcsr_sm_fm_multiply(overlap_matrix, mo_occ, smo, ncol, alpha=1.0_dp, beta=0.0_dp)
369 CALL cp_fm_struct_create(emat_struct, nrow_global=ncol, ncol_global=ncol, &
370 para_env=para_env, context=blacs_env)
371 CALL cp_fm_create(emat, emat_struct)
372 ! emat = mo_ref^T x smo
373 CALL parallel_gemm('T', 'N', ncol, ncol, nrow, 1.0_dp, mo_ref, smo, 0.0_dp, emat)
374 CALL cp_fm_create(rotated_mo_coeffs, mo_occ%matrix_struct)
375 ! rotated_mo_coeffs = cpmos x emat
376 CALL parallel_gemm('N', 'N', nrow, ncol, ncol, 1.0_dp, mo_occ, emat, 0.0_dp, rotated_mo_coeffs)
377
378 diff = maxval(abs(rotated_mo_coeffs%local_data - mo_occ%local_data))
379 IF (unit_nr > 0) THEN
380 WRITE (unit_nr, fmt="(T9,A,F10.6,/)") "Max difference between orbitals = ", diff
381 END IF
382
383 CALL cp_fm_to_fm(rotated_mo_coeffs, mo_occ)
384
385 nstates = SIZE(evects, dim=2)
386 DO istate = 1, nstates
387 associate(current_evect => evects(1, istate))
388 CALL parallel_gemm('N', 'N', nrow, ncol, ncol, 1.0_dp, current_evect, emat, 0.0_dp, smo)
389 diff = maxval(abs(smo%local_data - current_evect%local_data))
390 CALL cp_fm_to_fm(smo, current_evect)
391 END associate
392 END DO
393
394 CALL cp_fm_struct_release(emat_struct)
395 CALL cp_fm_release(smo)
396 CALL cp_fm_release(emat)
397 CALL cp_fm_release(rotated_mo_coeffs)
398
399 END SUBROUTINE rotate_vectors
400
401!**************************************************************************************************
402!> \brief Print RIXS spectrum.
403!> \param donor_state ...
404!> \param mu_i0 ...
405!> \param mu_if ...
406!> \param w_i0 ...
407!> \param w_if ...
408!> \param rixs_env ...
409!> \param rixs_section ...
410! **************************************************************************************************
411 SUBROUTINE print_rixs_to_file(donor_state, mu_i0, mu_if, w_i0, w_if, &
412 rixs_env, rixs_section)
413
414 TYPE(donor_state_type), POINTER :: donor_state
415 REAL(dp), DIMENSION(:, :) :: mu_i0
416 REAL(dp), DIMENSION(:, :, :) :: mu_if
417 REAL(dp), DIMENSION(:) :: w_i0, w_if
418 TYPE(rixs_env_type), POINTER :: rixs_env
419 TYPE(section_vals_type), POINTER :: rixs_section
420
421 INTEGER :: f, i, output_unit, rixs_unit
422 TYPE(cp_logger_type), POINTER :: logger
423
424 NULLIFY (logger)
425 logger => cp_get_default_logger()
426
427 rixs_unit = cp_print_key_unit_nr(logger, rixs_section, "PRINT%SPECTRUM", &
428 extension=".rixs", file_position="APPEND", &
429 file_action="WRITE", file_form="FORMATTED")
430
431 output_unit = cp_logger_get_default_io_unit()
432
433 IF (rixs_unit > 0) THEN
434
435 WRITE (rixs_unit, fmt="(A,/,T2,A,A,A,A,A,/,A)") &
436 "====================================================================================", &
437 "Excitation from ground-state (", &
438 rixs_env%core_state%state_type_char(donor_state%state_type), " of kind ", &
439 trim(donor_state%at_symbol), ") to core-excited state i ", &
440 "===================================================================================="
441
442 WRITE (rixs_unit, fmt="(T3,A)") &
443 "w_0i (eV) mu^x_0i (a.u.) mu^y_0i (a.u.) mu^z_0i (a.u.) mu^2_0i (a.u.)"
444 DO i = 1, SIZE(mu_i0, dim=2)
445 WRITE (rixs_unit, fmt="(T2,F10.4,T26,E12.5,T42,E12.5,T58,E12.5,T74,E12.5)") &
446 w_i0(i), mu_i0(1, i), mu_i0(2, i), mu_i0(3, i), mu_i0(4, i)
447 END DO
448
449 WRITE (rixs_unit, fmt="(A,/,T2,A,/,A)") &
450 "====================================================================================", &
451 "Emission from core-excited state i to valence-excited state f ", &
452 "===================================================================================="
453
454 WRITE (rixs_unit, fmt="(T3,A)") &
455 "w_0i (eV) w_if (eV) mu^x_if (a.u.) mu^y_if (a.u.) mu^z_if (a.u.) mu^2_if (a.u.)"
456
457 DO i = 1, SIZE(mu_if, dim=2)
458 DO f = 1, SIZE(mu_if, dim=3)
459 WRITE (rixs_unit, fmt="(T2,F10.4,T14,F8.4,T26,E12.5,T42,E12.5,T58,E12.5,T74,E12.5)") &
460 w_i0(i), w_if(f), mu_if(1, i, f), mu_if(2, i, f), mu_if(3, i, f), mu_if(4, i, f)
461 END DO
462 END DO
463
464 END IF
465
466 CALL cp_print_key_finished_output(rixs_unit, logger, rixs_section, "PRINT%SPECTRUM")
467
468 END SUBROUTINE print_rixs_to_file
469
470END MODULE rixs_methods
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public vazdacruz2021
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public rixs_control_release(rixs_control)
Releases the rixs_control_type.
subroutine, public rixs_control_create(rixs_control)
Creates and initializes the rixs_control_type.
Utilities to set up the control types.
subroutine, public read_rixs_control(rixs_control, rixs_section, qs_control)
Reads the input and stores in the rixs_control_type.
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
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
Definition cp_fm_types.F:15
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_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_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
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)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
subroutine, public rixs_header(iw)
...
Definition header.F:516
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Interface to the message passing library MPI.
basic linear algebra operations for full matrixes
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public evolt
Definition physcon.F:183
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
subroutine, public tddfpt(qs_env, calc_forces, rixs_env)
Perform TDDFPT calculation.
Methods for Resonant Inelastic XRAY Scattering (RIXS) calculations.
subroutine, public rixs_core(rixs_section, qs_env)
Perform RIXS calculation.
subroutine, public rixs(qs_env)
Driver for RIXS calculations.
Define Resonant Inelastic XRAY Scattering (RIXS) control type and associated create,...
Definition rixs_types.F:13
subroutine, public rixs_env_create(rixs_env)
Creates a rixs environment type.
Definition rixs_types.F:66
subroutine, public rixs_env_release(rixs_env)
Releases the rixs environment type.
Definition rixs_types.F:81
Methods for X-Ray absorption spectroscopy (XAS) using TDDFPT.
subroutine, public xas_tdp(qs_env, rixs_env)
Driver for XAS TDDFT calculations.
Define XAS TDP control type and associated create, release, etc subroutines, as well as XAS TDP envir...
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
keeps the information about the structure of a full matrix
represent 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
Valence state coming from the qs_tddfpt2 routine.
Definition rixs_types.F:40
Type containing informations about a single donor state.
Type containing informations such as inputs and results for TDP XAS calculations.