(git:ccc2433)
qs_energy_window.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 !> \brief Does all kind of post scf calculations for GPW/GAPW
10 !> \par History
11 !> Started as a copy from the relevant part of qs_scf
12 !> Start to adapt for k-points [07.2015, JGH]
13 !> \author Joost VandeVondele (10.2003)
14 ! **************************************************************************************************
16  USE cp_blacs_env, ONLY: cp_blacs_env_type
19  USE cp_fm_basic_linalg, ONLY: cp_fm_trace
23  cp_fm_struct_type
24  USE cp_fm_types, ONLY: cp_fm_create,&
25  cp_fm_release,&
26  cp_fm_to_fm,&
27  cp_fm_type
30  cp_logger_type
35  USE dbcsr_api, ONLY: &
36  dbcsr_add, dbcsr_copy, dbcsr_copy_into_existing, dbcsr_create, dbcsr_desymmetrize, &
37  dbcsr_frobenius_norm, dbcsr_get_info, dbcsr_multiply, dbcsr_p_type, dbcsr_release, &
38  dbcsr_type
41  section_vals_type,&
44  USE kinds, ONLY: dp
45  USE parallel_gemm_api, ONLY: parallel_gemm
46  USE particle_list_types, ONLY: particle_list_type
47  USE pw_env_types, ONLY: pw_env_get,&
48  pw_env_type
49  USE pw_methods, ONLY: pw_integrate_function
50  USE pw_pool_types, ONLY: pw_pool_type
51  USE pw_types, ONLY: pw_c1d_gs_type,&
52  pw_r3d_rs_type
54  USE qs_environment_types, ONLY: get_qs_env,&
55  qs_environment_type
56  USE qs_ks_types, ONLY: qs_ks_env_type
57  USE qs_rho_types, ONLY: qs_rho_get,&
58  qs_rho_type
59  USE qs_subsys_types, ONLY: qs_subsys_get,&
60  qs_subsys_type
61 #include "./base/base_uses.f90"
62 
63  IMPLICIT NONE
64  PRIVATE
65 
66  ! Global parameters
67  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_energy_window'
68 
69  PUBLIC :: energy_windows
70 
71 ! **************************************************************************************************
72 
73 CONTAINS
74 
75 ! **************************************************************************************************
76 !> \brief ...
77 !> \param qs_env ...
78 ! **************************************************************************************************
79  SUBROUTINE energy_windows(qs_env)
80 
81  TYPE(qs_environment_type), POINTER :: qs_env
82 
83  CHARACTER(len=*), PARAMETER :: routinen = 'energy_windows'
84  LOGICAL, PARAMETER :: debug = .false.
85  REAL(kind=dp), PARAMETER :: one = 1.0_dp, zero = 0.0_dp
86 
87  CHARACTER(len=40) :: ext, title
88  INTEGER :: handle, i, lanzcos_max_iter, last, nao, &
89  nelectron_total, newton_schulz_order, &
90  next, nwindows, print_unit, unit_nr
91  INTEGER, DIMENSION(:), POINTER :: stride(:)
92  LOGICAL :: mpi_io, print_cube, restrict_range
93  REAL(kind=dp) :: bin_width, density_ewindow_total, density_total, energy_range, fermi_level, &
94  filter_eps, frob_norm, lanzcos_threshold, lower_bound, occupation, upper_bound
95  REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: eigenvalues, p_eigenvalues, &
96  window_eigenvalues
97  TYPE(cp_blacs_env_type), POINTER :: blacs_env
98  TYPE(cp_fm_struct_type), POINTER :: ao_ao_fmstruct, window_fm_struct
99  TYPE(cp_fm_type) :: eigenvectors, eigenvectors_nonorth, matrix_ks_fm, p_eigenvectors, &
100  p_window_fm, rho_ao_ortho_fm, s_minus_half_fm, tmp_fm, window_eigenvectors, window_fm
101  TYPE(cp_logger_type), POINTER :: logger
102  TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_ks, matrix_s, rho_ao
103  TYPE(dbcsr_type) :: matrix_ks_nosym, s_half, s_minus_half, &
104  tmp
105  TYPE(dbcsr_type), POINTER :: rho_ao_ortho, window
106  TYPE(particle_list_type), POINTER :: particles
107  TYPE(pw_c1d_gs_type) :: rho_g
108  TYPE(pw_env_type), POINTER :: pw_env
109  TYPE(pw_pool_type), POINTER :: auxbas_pw_pool
110  TYPE(pw_r3d_rs_type) :: rho_r
111  TYPE(qs_ks_env_type), POINTER :: ks_env
112  TYPE(qs_rho_type), POINTER :: rho
113  TYPE(qs_subsys_type), POINTER :: subsys
114  TYPE(section_vals_type), POINTER :: dft_section, input, ls_scf_section
115 
116  CALL timeset(routinen, handle)
117 
118  logger => cp_get_default_logger()
119  unit_nr = cp_logger_get_default_io_unit(logger)
120  CALL get_qs_env(qs_env=qs_env, blacs_env=blacs_env, matrix_ks=matrix_ks, pw_env=pw_env, rho=rho, &
121  input=input, nelectron_total=nelectron_total, subsys=subsys, ks_env=ks_env, matrix_s=matrix_s)
122  CALL qs_subsys_get(subsys, particles=particles)
123  CALL qs_rho_get(rho_struct=rho, rho_ao=rho_ao)
124  IF (SIZE(rho_ao) > 1) CALL cp_warn(__location__, &
125  "The printing of energy windows is currently only implemented for clsoe shell systems")
126  CALL pw_env_get(pw_env, auxbas_pw_pool=auxbas_pw_pool)
127 
128  !reading the input
129  dft_section => section_vals_get_subs_vals(input, "DFT")
130  ls_scf_section => section_vals_get_subs_vals(input, "DFT%LS_SCF")
131  CALL section_vals_val_get(dft_section, "PRINT%ENERGY_WINDOWS%N_WINDOWS", i_val=nwindows)
132  CALL section_vals_val_get(dft_section, "PRINT%ENERGY_WINDOWS%PRINT_CUBES", l_val=print_cube)
133  CALL section_vals_val_get(dft_section, "PRINT%ENERGY_WINDOWS%RESTRICT_RANGE", l_val=restrict_range)
134  CALL section_vals_val_get(dft_section, "PRINT%ENERGY_WINDOWS%RANGE", r_val=energy_range)
135  NULLIFY (stride)
136  ALLOCATE (stride(3))
137  stride = section_get_ivals(dft_section, "PRINT%ENERGY_WINDOWS%STRIDE")
138  CALL section_vals_val_get(dft_section, "PRINT%ENERGY_WINDOWS%EPS_FILTER", r_val=filter_eps)
139  CALL section_vals_val_get(ls_scf_section, "EPS_LANCZOS", r_val=lanzcos_threshold)
140  CALL section_vals_val_get(ls_scf_section, "MAX_ITER_LANCZOS", i_val=lanzcos_max_iter)
141  CALL section_vals_val_get(ls_scf_section, "SIGN_SQRT_ORDER", i_val=newton_schulz_order)
142 
143  !Initialize data
144  ALLOCATE (window, rho_ao_ortho)
145  CALL dbcsr_get_info(matrix=matrix_ks(1)%matrix, nfullrows_total=nao)
146  ALLOCATE (eigenvalues(nao))
147  CALL dbcsr_create(tmp, template=matrix_s(1)%matrix, matrix_type="N")
148  CALL dbcsr_create(s_minus_half, template=matrix_s(1)%matrix, matrix_type="N")
149  CALL dbcsr_create(s_half, template=matrix_s(1)%matrix, matrix_type="N")
150  CALL dbcsr_create(window, template=matrix_s(1)%matrix, matrix_type="N")
151  CALL dbcsr_create(rho_ao_ortho, template=matrix_s(1)%matrix, matrix_type="N")
152  CALL cp_fm_struct_create(fmstruct=ao_ao_fmstruct, context=blacs_env, nrow_global=nao, ncol_global=nao)
153  CALL cp_fm_create(p_window_fm, ao_ao_fmstruct)
154  CALL cp_fm_create(matrix_ks_fm, ao_ao_fmstruct)
155  CALL cp_fm_create(rho_ao_ortho_fm, ao_ao_fmstruct)
156  CALL cp_fm_create(s_minus_half_fm, ao_ao_fmstruct)
157  CALL cp_fm_create(eigenvectors, ao_ao_fmstruct)
158  CALL cp_fm_create(eigenvectors_nonorth, ao_ao_fmstruct)
159  CALL auxbas_pw_pool%create_pw(rho_r)
160  CALL auxbas_pw_pool%create_pw(rho_g)
161 
162  !calculate S_minus_half
163  CALL matrix_sqrt_newton_schulz(s_half, s_minus_half, matrix_s(1)%matrix, filter_eps, &
164  newton_schulz_order, lanzcos_threshold, lanzcos_max_iter)
165 
166  !get the full ks matrix
167  CALL dbcsr_desymmetrize(matrix_ks(1)%matrix, matrix_ks_nosym)
168 
169  !switching to orthonormal basis
170  CALL dbcsr_multiply("N", "N", one, s_minus_half, matrix_ks_nosym, zero, tmp, filter_eps=filter_eps)
171  CALL dbcsr_multiply("N", "N", one, tmp, s_minus_half, zero, matrix_ks_nosym, filter_eps=filter_eps)
172  CALL copy_dbcsr_to_fm(matrix_ks_nosym, matrix_ks_fm)
173  CALL dbcsr_multiply("N", "N", one, s_half, rho_ao(1)%matrix, zero, tmp, filter_eps=filter_eps)
174  CALL dbcsr_multiply("N", "N", one, tmp, s_half, zero, rho_ao_ortho, filter_eps=filter_eps)
175  CALL copy_dbcsr_to_fm(rho_ao_ortho, rho_ao_ortho_fm)
176 
177  !diagonalize the full ks matrix
178  CALL choose_eigv_solver(matrix_ks_fm, eigenvectors, eigenvalues)
179  fermi_level = eigenvalues((nelectron_total + mod(nelectron_total, 2))/2)
180  IF (restrict_range) THEN
181  lower_bound = max(fermi_level - energy_range, eigenvalues(1))
182  upper_bound = min(fermi_level + energy_range, eigenvalues(SIZE(eigenvalues)))
183  ELSE
184  lower_bound = eigenvalues(1)
185  upper_bound = eigenvalues(SIZE(eigenvalues))
186  END IF
187  IF (unit_nr > 0) THEN
188  WRITE (unit_nr, *) " Creating energy windows. Fermi level: ", fermi_level
189  WRITE (unit_nr, *) " Printing Energy Levels from ", lower_bound, " to ", upper_bound
190  END IF
191  !Rotate the eigenvectors back out of the orthonormal basis
192  CALL copy_dbcsr_to_fm(s_minus_half, s_minus_half_fm)
193  !calculate the density caused by the mos in the energy window
194  CALL parallel_gemm("N", "N", nao, nao, nao, one, s_minus_half_fm, eigenvectors, zero, eigenvectors_nonorth)
195 
196  IF (debug) THEN
197  !check difference to actual density
198  CALL cp_fm_struct_create(fmstruct=window_fm_struct, context=blacs_env, nrow_global=nao, &
199  ncol_global=nelectron_total/2)
200  CALL cp_fm_create(window_fm, window_fm_struct)
201  CALL cp_fm_to_fm(eigenvectors_nonorth, window_fm, nelectron_total/2, 1, 1)
202  CALL parallel_gemm("N", "T", nao, nao, nelectron_total/2, 2*one, window_fm, window_fm, zero, p_window_fm)
203  !ensure the correct sparsity
204  CALL copy_fm_to_dbcsr(p_window_fm, tmp)
205  CALL dbcsr_copy(window, matrix_ks(1)%matrix)
206  CALL dbcsr_copy_into_existing(window, tmp)
207  CALL calculate_rho_elec(matrix_p=window, &
208  rho=rho_r, &
209  rho_gspace=rho_g, &
210  ks_env=ks_env)
211  density_total = pw_integrate_function(rho_r)
212  IF (unit_nr > 0) WRITE (unit_nr, *) " Ground-state density: ", density_total
213  frob_norm = dbcsr_frobenius_norm(window)
214  IF (unit_nr > 0) WRITE (unit_nr, *) " Frob norm of calculated ground-state density matrix: ", frob_norm
215  CALL dbcsr_add(window, rho_ao(1)%matrix, one, -one)
216  frob_norm = dbcsr_frobenius_norm(rho_ao(1)%matrix)
217  IF (unit_nr > 0) WRITE (unit_nr, *) " Frob norm of current density matrix: ", frob_norm
218  frob_norm = dbcsr_frobenius_norm(window)
219  IF (unit_nr > 0) WRITE (unit_nr, *) " Difference between calculated ground-state density and current density: ", frob_norm
220  CALL cp_fm_struct_release(window_fm_struct)
221  CALL cp_fm_create(tmp_fm, ao_ao_fmstruct)
222  CALL cp_fm_to_fm(rho_ao_ortho_fm, tmp_fm)
223  CALL cp_fm_create(p_eigenvectors, ao_ao_fmstruct)
224  ALLOCATE (p_eigenvalues(nao))
225  CALL choose_eigv_solver(tmp_fm, p_eigenvectors, p_eigenvalues)
226  CALL cp_fm_create(window_eigenvectors, ao_ao_fmstruct)
227  ALLOCATE (window_eigenvalues(nao))
228  CALL cp_fm_to_fm(eigenvectors, window_fm, nelectron_total/2, 1, 1)
229  CALL parallel_gemm("N", "T", nao, nao, nelectron_total/2, 2*one, window_fm, window_fm, zero, p_window_fm)
230  CALL choose_eigv_solver(p_window_fm, window_eigenvectors, window_eigenvalues)
231  DO i = 1, nao
232  IF (unit_nr > 0) THEN
233  WRITE (unit_nr, *) i, "H:", eigenvalues(i), "P:", p_eigenvalues(nao - i + 1), "Pnew:", window_eigenvalues(nao - i + 1)
234  END IF
235  END DO
236  DEALLOCATE (p_eigenvalues)
237  CALL cp_fm_release(tmp_fm)
238  CALL cp_fm_release(p_eigenvectors)
239  DEALLOCATE (window_eigenvalues)
240  CALL cp_fm_release(window_eigenvectors)
241  CALL cp_fm_release(window_fm)
242  END IF
243 
244  !create energy windows
245  bin_width = (upper_bound - lower_bound)/nwindows
246  next = 0
247 
248  DO i = 1, nwindows
249  DO WHILE (eigenvalues(next + 1) < lower_bound)
250  next = next + 1
251  END DO
252  last = next
253  DO WHILE (eigenvalues(next + 1) < lower_bound + i*bin_width)
254  next = next + 1
255  IF (next == SIZE(eigenvalues)) EXIT
256  END DO
257  !calculate the occupation
258  !not sure how bad this is now load balanced due to using the same blacs_env
259  CALL cp_fm_struct_create(fmstruct=window_fm_struct, context=blacs_env, nrow_global=nao, ncol_global=next - last)
260  CALL cp_fm_create(window_fm, window_fm_struct)
261  !copy the mos in the energy window into a separate matrix
262  CALL cp_fm_to_fm(eigenvectors, window_fm, next - last, last + 1, 1)
263  CALL parallel_gemm("N", "T", nao, nao, next - last, one, window_fm, window_fm, zero, p_window_fm)
264  CALL cp_fm_trace(p_window_fm, rho_ao_ortho_fm, occupation)
265  IF (print_cube) THEN
266  CALL cp_fm_to_fm(eigenvectors_nonorth, window_fm, next - last, last + 1, 1)
267  !print the energy window to a cube file
268  !calculate the density caused by the mos in the energy window
269  CALL parallel_gemm("N", "T", nao, nao, next - last, one, window_fm, window_fm, zero, p_window_fm)
270  CALL copy_fm_to_dbcsr(p_window_fm, tmp)
271  !ensure the correct sparsity
272  CALL dbcsr_copy(window, matrix_ks(1)%matrix)
273  CALL dbcsr_copy_into_existing(window, tmp)
274  CALL calculate_rho_elec(matrix_p=window, &
275  rho=rho_r, &
276  rho_gspace=rho_g, &
277  ks_env=ks_env)
278  WRITE (ext, "(A14,I5.5,A)") "-ENERGY-WINDOW", i, trim(cp_iter_string(logger%iter_info))//".cube"
279  mpi_io = .true.
280  print_unit = cp_print_key_unit_nr(logger, dft_section, "PRINT%ENERGY_WINDOWS", &
281  extension=ext, file_status="REPLACE", file_action="WRITE", &
282  log_filename=.false., mpi_io=mpi_io)
283  WRITE (title, "(A14,I5)") "ENERGY WINDOW ", i
284  CALL cp_pw_to_cube(rho_r, print_unit, title, particles=particles, stride=stride, mpi_io=mpi_io)
285  CALL cp_print_key_finished_output(print_unit, logger, dft_section, &
286  "PRINT%ENERGY_WINDOWS", mpi_io=mpi_io)
287  density_ewindow_total = pw_integrate_function(rho_r)
288  IF (unit_nr > 0) WRITE (unit_nr, "(A,F16.10,A,I5,A,F20.14,A,F20.14)") " Energy Level: ", &
289  lower_bound + (i - 0.5_dp)*bin_width, " Number of states: ", next - last, " Occupation: ", &
290  occupation, " Grid Density ", density_ewindow_total
291  ELSE
292  IF (unit_nr > 0) THEN
293  WRITE (unit_nr, "(A,F16.10,A,I5,A,F20.14)") " Energy Level: ", lower_bound + (i - 0.5_dp)*bin_width, &
294  " Number of states: ", next - last, " Occupation: ", occupation
295  END IF
296  END IF
297  CALL cp_fm_release(window_fm)
298  CALL cp_fm_struct_release(window_fm_struct)
299  END DO
300 
301  !clean up
302  CALL dbcsr_release(matrix_ks_nosym)
303  CALL dbcsr_release(tmp)
304  CALL dbcsr_release(window)
305  CALL dbcsr_release(s_minus_half)
306  CALL dbcsr_release(s_half)
307  CALL dbcsr_release(rho_ao_ortho)
308  DEALLOCATE (window, rho_ao_ortho)
309  CALL cp_fm_struct_release(ao_ao_fmstruct)
310  CALL cp_fm_release(matrix_ks_fm)
311  CALL cp_fm_release(rho_ao_ortho_fm)
312  CALL cp_fm_release(eigenvectors)
313  CALL cp_fm_release(p_window_fm)
314  CALL cp_fm_release(eigenvectors_nonorth)
315  CALL cp_fm_release(s_minus_half_fm)
316  CALL auxbas_pw_pool%give_back_pw(rho_r)
317  CALL auxbas_pw_pool%give_back_pw(rho_g)
318  DEALLOCATE (eigenvalues)
319  DEALLOCATE (stride)
320 
321  CALL timestop(handle)
322 
323  END SUBROUTINE energy_windows
324 
325 !**************************************************************************************************
326 
327 END MODULE qs_energy_window
methods related to the blacs parallel environment
Definition: cp_blacs_env.F:15
DBCSR operations in CP2K.
subroutine, public copy_dbcsr_to_fm(matrix, fm)
Copy a DBCSR matrix to a BLACS matrix.
subroutine, public copy_fm_to_dbcsr(fm, matrix, keep_sparsity)
Copy a BLACS matrix to a dbcsr matrix.
basic linear algebra operations for full matrices
used for collecting some of the diagonalization schemes available for cp_fm_type. cp_fm_power also mo...
Definition: cp_fm_diag.F:17
subroutine, public choose_eigv_solver(matrix, eigenvectors, eigenvalues, info)
Choose the Eigensolver depending on which library is available ELPA seems to be unstable for small sy...
Definition: cp_fm_diag.F:208
represent the structure of a full matrix
Definition: cp_fm_struct.F:14
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
Definition: cp_fm_struct.F:125
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
Definition: cp_fm_struct.F:320
represent a full matrix distributed on many processors
Definition: cp_fm_types.F:15
subroutine, public cp_fm_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
Definition: cp_fm_types.F:167
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...
character(len=default_string_length) function, public cp_iter_string(iter_info, print_key, for_file)
returns the iteration string, a string that is useful to create unique filenames (once you trim it)
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,...
A wrapper around pw_to_cube() which accepts particle_list_type.
subroutine, public cp_pw_to_cube(pw, unit_nr, title, particles, stride, zero_tails, silent, mpi_io)
...
objects that represent the structure of input sections and the data contained in an input section
integer function, dimension(:), pointer, public section_get_ivals(section_vals, keyword_name)
...
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
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Routines useful for iterative matrix calculations.
subroutine, public matrix_sqrt_newton_schulz(matrix_sqrt, matrix_sqrt_inv, matrix, threshold, order, eps_lanczos, max_iter_lanczos, symmetrize, converged)
compute the sqrt of a matrix via the sign function and the corresponding Newton-Schulz iterations the...
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
basic linear algebra operations for full matrixes
represent a simple array based list of the given type
container for various plainwaves related things
Definition: pw_env_types.F:14
subroutine, public pw_env_get(pw_env, pw_pools, cube_info, gridlevel_info, auxbas_pw_pool, auxbas_grid, auxbas_rs_desc, auxbas_rs_grid, rs_descs, rs_grids, xc_pw_pool, vdw_pw_pool, poisson_env, interp_section)
returns the various attributes of the pw env
Definition: pw_env_types.F:113
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Definition: pw_pool_types.F:24
Calculate the plane wave density by collocating the primitive Gaussian functions (pgf).
subroutine, public calculate_rho_elec(matrix_p, matrix_p_kp, rho, rho_gspace, total_rho, ks_env, soft_valid, compute_tau, compute_grad, basis_type, der_type, idir, task_list_external, pw_env_external)
computes the density corresponding to a given density matrix on the grid
Does all kind of post scf calculations for GPW/GAPW.
subroutine, public energy_windows(qs_env)
...
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_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, 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, rhs)
Get the QUICKSTEP environment.
superstucture that hold various representations of the density and keeps track of which ones are vali...
Definition: qs_rho_types.F:18
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Definition: qs_rho_types.F:229
types that represent a quickstep subsys
subroutine, public qs_subsys_get(subsys, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, cp_subsys, nelectron_total, nelectron_spin)
...