(git:374b731)
Loading...
Searching...
No Matches
qs_band_structure.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 Calculation of band structures
10!> \par History
11!> 2015.06 created [JGH]
12!> \author JGH
13! **************************************************************************************************
15 USE cell_types, ONLY: cell_type
18 USE cp_files, ONLY: close_file,&
22 USE dbcsr_api, ONLY: dbcsr_p_type
27 USE kinds, ONLY: default_string_length,&
28 dp,&
34 USE kpoint_types, ONLY: get_kpoint_info,&
40 USE machine, ONLY: m_walltime
41 USE mathconstants, ONLY: twopi
43 USE physcon, ONLY: angstrom,&
44 evolt
49 USE qs_mo_types, ONLY: get_mo_set
55#include "./base/base_uses.f90"
56
57 IMPLICIT NONE
58
59 PRIVATE
60
61 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_band_structure'
62
64
65! **************************************************************************************************
66
67CONTAINS
68
69! **************************************************************************************************
70!> \brief Main routine for band structure calculation
71!> \param qs_env ...
72!> \author JGH
73! **************************************************************************************************
74 SUBROUTINE calculate_band_structure(qs_env)
75 TYPE(qs_environment_type), POINTER :: qs_env
76
77 LOGICAL :: do_kpoints, explicit
78 TYPE(section_vals_type), POINTER :: bs_input
79
80 bs_input => section_vals_get_subs_vals(qs_env%input, "DFT%PRINT%BAND_STRUCTURE")
81 CALL section_vals_get(bs_input, explicit=explicit)
82 IF (explicit) THEN
83 CALL get_qs_env(qs_env, do_kpoints=do_kpoints)
84 IF (do_kpoints) THEN
85 CALL do_calculate_band_structure(qs_env)
86 ELSE
87 block
88 TYPE(qs_environment_type), POINTER :: qs_env_kp
89 CALL create_kp_from_gamma(qs_env, qs_env_kp)
90 CALL do_calculate_band_structure(qs_env_kp)
91 CALL qs_env_release(qs_env_kp)
92 DEALLOCATE (qs_env_kp)
93 END block
94 END IF
95 END IF
96
97 END SUBROUTINE calculate_band_structure
98
99! **************************************************************************************************
100!> \brief band structure calculation
101!> \param qs_env ...
102!> \author JGH
103! **************************************************************************************************
104 SUBROUTINE do_calculate_band_structure(qs_env)
105 TYPE(qs_environment_type), POINTER :: qs_env
106
107 CHARACTER(LEN=default_string_length) :: filename, ustr
108 CHARACTER(LEN=default_string_length), &
109 DIMENSION(:), POINTER :: spname, strptr
110 CHARACTER(LEN=max_line_length) :: error_message
111 INTEGER :: bs_data_unit, i, i_rep, ik, ikk, ikpgr, &
112 imo, ip, ispin, n_ptr, n_rep, nadd, &
113 nkp, nmo, npline, npoints, nspins, &
114 unit_nr
115 INTEGER, DIMENSION(2) :: kp_range
116 LOGICAL :: explicit, io_default, my_kpgrp
117 REAL(kind=dp) :: t1, t2
118 REAL(kind=dp), DIMENSION(3) :: kpptr
119 REAL(kind=dp), DIMENSION(:), POINTER :: eigenvalues, eigval, occnum, &
120 occupation_numbers, wkp
121 REAL(kind=dp), DIMENSION(:, :), POINTER :: kpgeneral, kspecial, xkp
122 TYPE(cell_type), POINTER :: cell
123 TYPE(dft_control_type), POINTER :: dft_control
124 TYPE(kpoint_env_type), POINTER :: kp
125 TYPE(kpoint_type), POINTER :: kpoint
126 TYPE(mp_para_env_type), POINTER :: para_env
127 TYPE(section_vals_type), POINTER :: bs_input, kpset
128
129 bs_input => section_vals_get_subs_vals(qs_env%input, "DFT%PRINT%BAND_STRUCTURE")
130 CALL section_vals_get(bs_input, explicit=explicit)
131 IF (explicit) THEN
132 CALL section_vals_val_get(bs_input, "FILE_NAME", c_val=filename)
133 CALL section_vals_val_get(bs_input, "ADDED_MOS", i_val=nadd)
134 unit_nr = cp_logger_get_default_io_unit()
135 CALL get_qs_env(qs_env=qs_env, para_env=para_env)
136 CALL get_qs_env(qs_env, cell=cell)
137 kpset => section_vals_get_subs_vals(bs_input, "KPOINT_SET")
138 CALL section_vals_get(kpset, n_repetition=n_rep)
139 IF (unit_nr > 0) THEN
140 WRITE (unit_nr, fmt="(/,T2,A)") "KPOINTS| Band Structure Calculation"
141 WRITE (unit_nr, fmt="(T2,A,T71,I10)") "KPOINTS| Number of k-point sets", n_rep
142 IF (nadd /= 0) THEN
143 WRITE (unit_nr, fmt="(T2,A,T71,I10)") "KPOINTS| Number of added MOs/bands", nadd
144 END IF
145 END IF
146 IF (filename == "") THEN
147 ! use standard output file
148 bs_data_unit = unit_nr
149 io_default = .true.
150 ELSE
151 io_default = .false.
152 IF (para_env%is_source()) THEN
153 CALL open_file(filename, unit_number=bs_data_unit, file_status="UNKNOWN", file_action="WRITE", &
154 file_position="APPEND")
155 ELSE
156 bs_data_unit = -1
157 END IF
158 END IF
159 DO i_rep = 1, n_rep
160 t1 = m_walltime()
161 CALL section_vals_val_get(kpset, "NPOINTS", i_rep_section=i_rep, i_val=npline)
162 CALL section_vals_val_get(kpset, "UNITS", i_rep_section=i_rep, c_val=ustr)
163 CALL uppercase(ustr)
164 CALL section_vals_val_get(kpset, "SPECIAL_POINT", i_rep_section=i_rep, n_rep_val=n_ptr)
165 ALLOCATE (kspecial(3, n_ptr))
166 ALLOCATE (spname(n_ptr))
167 DO ip = 1, n_ptr
168 CALL section_vals_val_get(kpset, "SPECIAL_POINT", i_rep_section=i_rep, i_rep_val=ip, c_vals=strptr)
169 IF (SIZE(strptr(:), 1) == 4) THEN
170 spname(ip) = strptr(1)
171 DO i = 1, 3
172 CALL read_float_object(strptr(i + 1), kpptr(i), error_message)
173 IF (len_trim(error_message) > 0) cpabort(trim(error_message))
174 END DO
175 ELSE IF (SIZE(strptr(:), 1) == 3) THEN
176 spname(ip) = "not specified"
177 DO i = 1, 3
178 CALL read_float_object(strptr(i), kpptr(i), error_message)
179 IF (len_trim(error_message) > 0) cpabort(trim(error_message))
180 END DO
181 ELSE
182 cpabort("Input SPECIAL_POINT invalid")
183 END IF
184 SELECT CASE (ustr)
185 CASE ("B_VECTOR")
186 kspecial(1:3, ip) = kpptr(1:3)
187 CASE ("CART_ANGSTROM")
188 kspecial(1:3, ip) = (kpptr(1)*cell%hmat(1, 1:3) + &
189 kpptr(2)*cell%hmat(2, 1:3) + &
190 kpptr(3)*cell%hmat(3, 1:3))/twopi*angstrom
191 CASE ("CART_BOHR")
192 kspecial(1:3, ip) = (kpptr(1)*cell%hmat(1, 1:3) + &
193 kpptr(2)*cell%hmat(2, 1:3) + &
194 kpptr(3)*cell%hmat(3, 1:3))/twopi
195 CASE DEFAULT
196 cpabort("Unknown unit <"//trim(ustr)//"> specified for k-point definition")
197 END SELECT
198 END DO
199 npoints = (n_ptr - 1)*npline + 1
200 cpassert(npoints >= 1)
201
202 ! Initialize environment and calculate MOs
203 ALLOCATE (kpgeneral(3, npoints))
204 kpgeneral(1:3, 1) = kspecial(1:3, 1)
205 ikk = 1
206 DO ik = 2, n_ptr
207 DO ip = 1, npline
208 ikk = ikk + 1
209 kpgeneral(1:3, ikk) = kspecial(1:3, ik - 1) + &
210 REAL(ip, kind=dp)/real(npline, kind=dp)* &
211 (kspecial(1:3, ik) - kspecial(1:3, ik - 1))
212 END DO
213 END DO
214 NULLIFY (kpoint)
215 CALL calculate_kp_orbitals(qs_env, kpoint, "GENERAL", nadd, kpgeneral=kpgeneral)
216 DEALLOCATE (kpgeneral)
217
218 CALL get_qs_env(qs_env, dft_control=dft_control)
219 nspins = dft_control%nspins
220 kp => kpoint%kp_env(1)%kpoint_env
221 CALL get_mo_set(kp%mos(1, 1), nmo=nmo)
222 ALLOCATE (eigval(nmo), occnum(nmo))
223 CALL get_kpoint_info(kpoint, nkp=nkp, kp_range=kp_range, xkp=xkp, wkp=wkp)
224
225 IF (unit_nr > 0) THEN
226 WRITE (unit=unit_nr, fmt="(T2,A,I4,T71,I10)") &
227 "KPOINTS| Number of k-points in set ", i_rep, npoints
228 WRITE (unit=unit_nr, fmt="(T2,A)") &
229 "KPOINTS| In units of b-vector [2pi/Bohr]"
230 DO ip = 1, n_ptr
231 WRITE (unit=unit_nr, fmt="(T2,A,I5,1X,A11,3(1X,F12.6))") &
232 "KPOINTS| Special point ", ip, adjustl(trim(spname(ip))), kspecial(1:3, ip)
233 END DO
234 END IF
235 IF (bs_data_unit > 0 .AND. (bs_data_unit /= unit_nr)) THEN
236 WRITE (unit=bs_data_unit, fmt="(4(A,I0),A)") &
237 "# Set ", i_rep, ": ", n_ptr, " special points, ", npoints, " k-points, ", nmo, " bands"
238 DO ip = 1, n_ptr
239 WRITE (unit=bs_data_unit, fmt="(A,I0,T20,T24,3(1X,F14.8),2X,A)") &
240 "# Special point ", ip, kspecial(1:3, ip), adjustl(trim(spname(ip)))
241 END DO
242 END IF
243
244 DO ik = 1, nkp
245 my_kpgrp = (ik >= kp_range(1) .AND. ik <= kp_range(2))
246 DO ispin = 1, nspins
247 IF (my_kpgrp) THEN
248 ikpgr = ik - kp_range(1) + 1
249 kp => kpoint%kp_env(ikpgr)%kpoint_env
250 CALL get_mo_set(kp%mos(1, ispin), eigenvalues=eigenvalues, occupation_numbers=occupation_numbers)
251 eigval(1:nmo) = eigenvalues(1:nmo)
252 occnum(1:nmo) = occupation_numbers(1:nmo)
253 ELSE
254 eigval(1:nmo) = 0.0_dp
255 occnum(1:nmo) = 0.0_dp
256 END IF
257 CALL kpoint%para_env_inter_kp%sum(eigval)
258 CALL kpoint%para_env_inter_kp%sum(occnum)
259 IF (bs_data_unit > 0) THEN
260 WRITE (unit=bs_data_unit, fmt="(A,I0,T15,A,I0,A,T24,3(1X,F14.8),3X,F14.8)") &
261 "# Point ", ik, " Spin ", ispin, ":", xkp(1:3, ik), wkp(ik)
262 WRITE (unit=bs_data_unit, fmt="(A)") &
263 "# Band Energy [eV] Occupation"
264 DO imo = 1, nmo
265 WRITE (unit=bs_data_unit, fmt="(T2,I7,2(1X,F14.8))") &
266 imo, eigval(imo)*evolt, occnum(imo)
267 END DO
268 END IF
269 END DO
270 END DO
271
272 DEALLOCATE (kspecial, spname)
273 DEALLOCATE (eigval, occnum)
274 CALL kpoint_release(kpoint)
275 t2 = m_walltime()
276 IF (unit_nr > 0) THEN
277 WRITE (unit=unit_nr, fmt="(T2,A,T67,F14.3)") "KPOINTS| Time for k-point line ", t2 - t1
278 END IF
279
280 END DO
281
282 ! Close output files
283 IF (.NOT. io_default) THEN
284 IF (para_env%is_source()) CALL close_file(bs_data_unit)
285 END IF
286
287 END IF
288
289 END SUBROUTINE do_calculate_band_structure
290
291! **************************************************************************************************
292!> \brief diagonalize KS matrices at a set of kpoints
293!> \param qs_env ...
294!> \param kpoint ...
295!> \param scheme ...
296!> \param nadd ...
297!> \param mp_grid ...
298!> \param kpgeneral ...
299!> \param group_size_ext ...
300!> \author JGH
301! **************************************************************************************************
302 SUBROUTINE calculate_kp_orbitals(qs_env, kpoint, scheme, nadd, mp_grid, kpgeneral, group_size_ext)
303 TYPE(qs_environment_type), POINTER :: qs_env
304 TYPE(kpoint_type), POINTER :: kpoint
305 CHARACTER(LEN=*), INTENT(IN) :: scheme
306 INTEGER, INTENT(IN) :: nadd
307 INTEGER, DIMENSION(3), INTENT(IN), OPTIONAL :: mp_grid
308 REAL(kind=dp), DIMENSION(:, :), INTENT(IN), &
309 OPTIONAL :: kpgeneral
310 INTEGER, INTENT(IN), OPTIONAL :: group_size_ext
311
312 LOGICAL :: diis_step
313 TYPE(cp_blacs_env_type), POINTER :: blacs_env
314 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_ks, matrix_s
315 TYPE(dft_control_type), POINTER :: dft_control
316 TYPE(mp_para_env_type), POINTER :: para_env
317 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
318 POINTER :: sab_nl
319 TYPE(qs_scf_env_type), POINTER :: scf_env
320 TYPE(scf_control_type), POINTER :: scf_control
321
322 CALL calculate_kpoints_for_bs(kpoint, scheme, group_size_ext, mp_grid, kpgeneral)
323
324 CALL get_qs_env(qs_env=qs_env, para_env=para_env, blacs_env=blacs_env)
325 CALL kpoint_env_initialize(kpoint, para_env, blacs_env)
326
327 CALL kpoint_initialize_mos(kpoint, qs_env%mos, nadd)
328 CALL kpoint_initialize_mo_set(kpoint)
329
330 CALL get_qs_env(qs_env, sab_kp=sab_nl, dft_control=dft_control)
331 CALL kpoint_init_cell_index(kpoint, sab_nl, para_env, dft_control)
332
333 CALL get_qs_env(qs_env, matrix_ks_kp=matrix_ks, matrix_s_kp=matrix_s, &
334 scf_env=scf_env, scf_control=scf_control)
335 CALL do_general_diag_kp(matrix_ks, matrix_s, kpoint, scf_env, scf_control, .false., diis_step)
336
337 END SUBROUTINE calculate_kp_orbitals
338
339! **************************************************************************************************
340!> \brief ...
341!> \param kpoint ...
342!> \param scheme ...
343!> \param group_size_ext ...
344!> \param mp_grid ...
345!> \param kpgeneral ...
346! **************************************************************************************************
347 SUBROUTINE calculate_kpoints_for_bs(kpoint, scheme, group_size_ext, mp_grid, kpgeneral)
348
349 TYPE(kpoint_type), POINTER :: kpoint
350 CHARACTER(LEN=*), INTENT(IN) :: scheme
351 INTEGER, INTENT(IN), OPTIONAL :: group_size_ext
352 INTEGER, DIMENSION(3), INTENT(IN), OPTIONAL :: mp_grid
353 REAL(kind=dp), DIMENSION(:, :), INTENT(IN), &
354 OPTIONAL :: kpgeneral
355
356 INTEGER :: i, ix, iy, iz, npoints
357
358 cpassert(.NOT. ASSOCIATED(kpoint))
359
360 CALL kpoint_create(kpoint)
361
362 kpoint%kp_scheme = scheme
363 kpoint%symmetry = .false.
364 kpoint%verbose = .false.
365 kpoint%full_grid = .false.
366 kpoint%use_real_wfn = .false.
367 kpoint%eps_geo = 1.e-6_dp
368 IF (PRESENT(group_size_ext)) THEN
369 kpoint%parallel_group_size = group_size_ext
370 ELSE
371 kpoint%parallel_group_size = -1
372 END IF
373 SELECT CASE (scheme)
374 CASE ("GAMMA")
375 kpoint%nkp = 1
376 ALLOCATE (kpoint%xkp(3, 1), kpoint%wkp(1))
377 kpoint%xkp(1:3, 1) = 0.0_dp
378 kpoint%wkp(1) = 1.0_dp
379 kpoint%symmetry = .true.
380 ALLOCATE (kpoint%kp_sym(1))
381 NULLIFY (kpoint%kp_sym(1)%kpoint_sym)
382 CALL kpoint_sym_create(kpoint%kp_sym(1)%kpoint_sym)
383 CASE ("MONKHORST-PACK")
384 cpassert(PRESENT(mp_grid))
385 npoints = mp_grid(1)*mp_grid(2)*mp_grid(3)
386 kpoint%nkp_grid(1:3) = mp_grid(1:3)
387 kpoint%full_grid = .true.
388 kpoint%nkp = npoints
389 ALLOCATE (kpoint%xkp(3, npoints), kpoint%wkp(npoints))
390 kpoint%wkp(:) = 1._dp/real(npoints, kind=dp)
391 i = 0
392 DO ix = 1, mp_grid(1)
393 DO iy = 1, mp_grid(2)
394 DO iz = 1, mp_grid(3)
395 i = i + 1
396 kpoint%xkp(1, i) = real(2*ix - mp_grid(1) - 1, kind=dp)/(2._dp*real(mp_grid(1), kind=dp))
397 kpoint%xkp(2, i) = real(2*iy - mp_grid(2) - 1, kind=dp)/(2._dp*real(mp_grid(2), kind=dp))
398 kpoint%xkp(3, i) = real(2*iz - mp_grid(3) - 1, kind=dp)/(2._dp*real(mp_grid(3), kind=dp))
399 END DO
400 END DO
401 END DO
402 ! default: no symmetry settings
403 ALLOCATE (kpoint%kp_sym(kpoint%nkp))
404 DO i = 1, kpoint%nkp
405 NULLIFY (kpoint%kp_sym(i)%kpoint_sym)
406 CALL kpoint_sym_create(kpoint%kp_sym(i)%kpoint_sym)
407 END DO
408 CASE ("MACDONALD")
409 cpabort("MACDONALD not implemented")
410 CASE ("GENERAL")
411 cpassert(PRESENT(kpgeneral))
412 npoints = SIZE(kpgeneral, 2)
413 kpoint%nkp = npoints
414 ALLOCATE (kpoint%xkp(3, npoints), kpoint%wkp(npoints))
415 kpoint%wkp(:) = 1._dp/real(npoints, kind=dp)
416 kpoint%xkp(1:3, 1:npoints) = kpgeneral(1:3, 1:npoints)
417 ! default: no symmetry settings
418 ALLOCATE (kpoint%kp_sym(kpoint%nkp))
419 DO i = 1, kpoint%nkp
420 NULLIFY (kpoint%kp_sym(i)%kpoint_sym)
421 CALL kpoint_sym_create(kpoint%kp_sym(i)%kpoint_sym)
422 END DO
423 CASE DEFAULT
424 cpabort("Unknown kpoint scheme requested")
425 END SELECT
426
427 END SUBROUTINE calculate_kpoints_for_bs
428
429END MODULE qs_band_structure
Handles all functions related to the CELL.
Definition cell_types.F:15
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Utility routines to open and close files. Tracking of preconnections.
Definition cp_files.F:16
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
Definition cp_files.F:308
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
Definition cp_files.F:119
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...
Utility routines to read data from files. Kept as close as possible to the old parser because.
elemental subroutine, public read_float_object(string, object, error_message)
Returns a floating point number read from a string including fraction like z1/z2.
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
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
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
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public max_line_length
Definition kinds.F:59
integer, parameter, public dp
Definition kinds.F:34
integer, parameter, public default_string_length
Definition kinds.F:57
Routines needed for kpoint calculation.
subroutine, public kpoint_initialize_mo_set(kpoint)
...
subroutine, public kpoint_initialize_mos(kpoint, mos, added_mos, for_aux_fit)
Initialize a set of MOs and density matrix for each kpoint (kpoint group)
subroutine, public kpoint_init_cell_index(kpoint, sab_nl, para_env, dft_control)
Generates the mapping of cell indices and linear RS index CELL (0,0,0) is always mapped to index 1.
subroutine, public kpoint_env_initialize(kpoint, para_env, blacs_env, with_aux_fit)
Initialize the kpoint environment.
Types and basic routines needed for a kpoint calculation.
subroutine, public kpoint_sym_create(kp_sym)
Create a single kpoint symmetry environment.
subroutine, public kpoint_release(kpoint)
Release a kpoint environment, deallocate all data.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
subroutine, public get_kpoint_info(kpoint, kp_scheme, nkp_grid, kp_shift, symmetry, verbose, full_grid, use_real_wfn, eps_geo, parallel_group_size, kp_range, nkp, xkp, wkp, para_env, blacs_env_all, para_env_kp, para_env_inter_kp, blacs_env, kp_env, kp_aux_env, mpools, iogrp, nkp_groups, kp_dist, cell_to_index, index_to_cell, sab_nl, sab_nl_nosym)
Retrieve information from a kpoint environment.
Machine interface based on Fortran 2003 and POSIX.
Definition machine.F:17
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
Definition machine.F:123
Definition of mathematical constants and functions.
real(kind=dp), parameter, public twopi
Interface to the message passing library MPI.
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public evolt
Definition physcon.F:183
real(kind=dp), parameter, public angstrom
Definition physcon.F:144
Calculation of band structures.
subroutine, public calculate_kp_orbitals(qs_env, kpoint, scheme, nadd, mp_grid, kpgeneral, group_size_ext)
diagonalize KS matrices at a set of kpoints
subroutine, public calculate_kpoints_for_bs(kpoint, scheme, group_size_ext, mp_grid, kpgeneral)
...
subroutine, public calculate_band_structure(qs_env)
Main routine for band structure calculation.
subroutine, public qs_env_release(qs_env)
releases the given qs_env (see doc/ReferenceCounting.html)
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.
Initialize a qs_env for kpoint calculations starting from a gamma point qs_env.
Definition qs_gamma2kp.F:14
subroutine, public create_kp_from_gamma(qs_env, qs_env_kp, with_xc_terms)
...
Definition qs_gamma2kp.F:63
Definition and initialisation of the mo data type.
Definition qs_mo_types.F:22
subroutine, public get_mo_set(mo_set, maxocc, homo, lfomo, nao, nelectron, n_el_f, nmo, eigenvalues, occupation_numbers, mo_coeff, mo_coeff_b, uniform_occupation, kts, mu, flexible_electron_count)
Get the components of a MO set data structure.
Define the neighbor list data types and the corresponding functionality.
Different diagonalization schemes that can be used for the iterative solution of the eigenvalue probl...
subroutine, public do_general_diag_kp(matrix_ks, matrix_s, kpoints, scf_env, scf_control, update_p, diis_step, diis_error, qs_env)
Kpoint diagonalization routine Transforms matrices to kpoint, distributes kpoint groups,...
module that contains the definitions of the scf types
parameters that control an scf iteration
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
Type defining parameters related to the simulation cell.
Definition cell_types.F:55
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
Keeps information about a specific k-point.
Contains information about kpoints.
stores all the informations relevant to an mpi environment