(git:ccc2433)
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
16  USE cp_blacs_env, ONLY: cp_blacs_env_type
17  USE cp_control_types, ONLY: dft_control_type
18  USE cp_files, ONLY: close_file,&
19  open_file
22  USE dbcsr_api, ONLY: dbcsr_p_type
25  section_vals_type,&
27  USE kinds, ONLY: default_string_length,&
28  dp,&
34  USE kpoint_types, ONLY: get_kpoint_info,&
36  kpoint_env_type,&
39  kpoint_type
40  USE machine, ONLY: m_walltime
41  USE mathconstants, ONLY: twopi
42  USE message_passing, ONLY: mp_para_env_type
43  USE physcon, ONLY: angstrom,&
44  evolt
45  USE qs_environment_types, ONLY: get_qs_env,&
47  qs_environment_type
49  USE qs_mo_types, ONLY: get_mo_set
50  USE qs_neighbor_list_types, ONLY: neighbor_list_set_p_type
52  USE qs_scf_types, ONLY: qs_scf_env_type
53  USE scf_control_types, ONLY: scf_control_type
54  USE string_utilities, ONLY: uppercase
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 
67 CONTAINS
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 
429 END MODULE qs_band_structure
subroutine uppercase(string)
...
Definition: dumpdcd.F:1376
Handles all functions related to the CELL.
Definition: cell_types.F:15
methods related to the blacs parallel environment
Definition: cp_blacs_env.F:15
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.
Definition: kpoint_types.F:15
subroutine, public kpoint_sym_create(kp_sym)
Create a single kpoint symmetry environment.
Definition: kpoint_types.F:769
subroutine, public kpoint_release(kpoint)
Release a kpoint environment, deallocate all data.
Definition: kpoint_types.F:234
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
Definition: kpoint_types.F:188
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.
Definition: kpoint_types.F:333
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.
Definition: mathconstants.F:16
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 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.
subroutine, public qs_env_release(qs_env)
releases the given qs_env (see doc/ReferenceCounting.html)
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.
Definition: qs_mo_types.F:397
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
Definition: qs_scf_types.F:14
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.