53#include "./base/base_uses.f90"
59 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'floquet_utils'
81 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp
82 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :), &
84 REAL(kind=
dp),
ALLOCATABLE, &
85 DIMENSION(:, :, :, :),
OPTIONAL :: de_dk
87 CHARACTER(LEN=*),
PARAMETER :: routinen =
'calculate_epsilon_derivative'
89 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: c_dh_c, c_ds_c, c_k, dh_dk_i, ds_dk_i, &
91 INTEGER :: handle, i_dir, ikp, ispin, n, n_img_all, &
93 INTEGER,
DIMENSION(:, :),
POINTER :: index_to_cell_all
94 INTEGER,
DIMENSION(:, :, :),
POINTER :: cell_to_index_all
95 LOGICAL :: present_dedk, present_ek
96 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eigenvals
97 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :, :) :: h_rs, s_rs
98 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat
100 TYPE(
dbcsr_p_type),
DIMENSION(:, :),
POINTER :: matrix_ks_kp, matrix_s_kp
101 TYPE(
kpoint_type),
POINTER :: kpoints_all, kpoints_scf
107 CALL timeset(routinen, handle)
109 present_ek =
PRESENT(e_k)
110 present_dedk =
PRESENT(de_dk)
112 IF (.NOT. (present_ek .OR. present_dedk)) cpabort(
"Subroutine needs either e_k or de_dk")
115 matrix_ks_kp=matrix_ks_kp, &
116 matrix_s_kp=matrix_s_kp, &
119 kpoints=kpoints_scf, &
126 n_spin =
SIZE(matrix_ks_kp, 1)
131 NULLIFY (kpoints_all)
134 CALL get_kpoint_info(kpoints_all, cell_to_index=cell_to_index_all, index_to_cell=index_to_cell_all)
136 ALLOCATE (s_rs(1, nao, nao, n_img_all), h_rs(n_spin, nao, nao, n_img_all), source=0.0_dp)
142 IF (present_dedk)
ALLOCATE (de_dk(n_spin, nkp, 3, nao), source=0.0_dp)
143 IF (present_ek)
ALLOCATE (e_k(n_spin, nkp, nao), source=0.0_dp)
149 IF (present_dedk)
ALLOCATE (ds_dk_i(nao, nao), c_ds_c(nao, nao), &
150 dh_dk_i(nao, nao), c_dh_c(nao, nao), source=
z_zero)
151 ALLOCATE (c_k(nao, nao), s_k(nao, nao), h_k(nao, nao), source=
z_zero)
152 ALLOCATE (eigenvals(nao), source=0.0_dp)
160 CALL rs_to_kp(s_rs(1, :, :, :), s_k, index_to_cell_all, xkp(:, ikp))
161 CALL rs_to_kp(h_rs(ispin, :, :, :), h_k, index_to_cell_all, xkp(:, ikp))
165 IF (present_ek) e_k(ispin, ikp, :) = eigenvals(:)
167 IF (present_dedk)
THEN
171 CALL rs_to_kp(s_rs(1, :, :, :), ds_dk_i, index_to_cell_all, xkp(:, ikp), i_dir, hmat)
172 CALL rs_to_kp(h_rs(ispin, :, :, :), dh_dk_i, index_to_cell_all, xkp(:, ikp), i_dir, hmat)
174 CALL gemm_square(c_k,
'C', ds_dk_i,
'N', c_k,
'N', c_ds_c)
175 CALL gemm_square(c_k,
'C', dh_dk_i,
'N', c_k,
'N', c_dh_c)
178 de_dk(ispin, ikp, i_dir, n) = dble(c_dh_c(n, n)) - dble(eigenvals(n)*c_ds_c(n, n))
185 IF (present_dedk)
DEALLOCATE (ds_dk_i, c_ds_c, dh_dk_i, c_dh_c)
186 DEALLOCATE (s_k, h_k, c_k, eigenvals)
188 DEALLOCATE (s_rs, h_rs)
191 CALL timestop(handle)
203 REAL(kind=
dp),
DIMENSION(3) :: xkp
204 COMPLEX(KIND=dp),
ALLOCATABLE, &
205 DIMENSION(:, :, :, :) :: momentum
207 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_momentum_matrix'
209 COMPLEX(KIND=dp),
ALLOCATABLE, &
210 DIMENSION(:, :, :, :, :) :: dipole
211 INTEGER :: handle, i, i_dir, ispin, j, n_spin, nao
212 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp1
213 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: e_k
214 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :, :) :: de_dk
218 CALL timeset(routinen, handle)
224 NULLIFY (dft_control)
225 CALL get_qs_env(qs_env, dft_control=dft_control, mos=mos)
228 ALLOCATE (xkp1(3, 1), source=0.0_dp)
231 n_spin = dft_control%nspins
243 momentum(ispin, i_dir, i, j) = de_dk(ispin, 1, i_dir, i)
245 momentum(ispin, i_dir, i, j) =
gaussi*(e_k(ispin, 1, i) - e_k(ispin, 1, j))* &
246 dipole(ispin, 1, i_dir, i, j)
254 DEALLOCATE (xkp1, dipole, e_k, de_dk)
256 CALL timestop(handle)
267 SUBROUTINE build_off_diagonal_matrix(qs_env, bs_env, xkp, ispin, off_diag_m)
270 REAL(kind=
dp),
DIMENSION(3) :: xkp
272 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: off_diag_m
274 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_off_diagonal_matrix'
276 COMPLEX(KIND=dp),
ALLOCATABLE, &
277 DIMENSION(:, :, :, :) :: momentum
278 COMPLEX(KIND=dp),
DIMENSION(3) :: efactor
279 INTEGER :: handle, i, i_dir, j, n_spin, nao
280 REAL(kind=
dp) :: amplitude, omega
281 REAL(kind=
dp),
DIMENSION(3) :: e_vec, phi, polarisation
284 CALL timeset(routinen, handle)
288 polarisation(:) = bs_env%floquet_polarisation(:)
289 IF (sqrt(sum(polarisation**2)) < epsilon(0.0_dp))
THEN
290 cpabort(
"Invalid (too small) polarisation vector specified for POLARISATION_PUMP")
293 amplitude = bs_env%floquet_amplitude
294 e_vec(:) = amplitude*polarisation
295 phi(:) =
pi*bs_env%floquet_phi(:)
296 omega = bs_env%floquet_omega
297 n_spin = bs_env%n_spin
301 ALLOCATE (momentum(n_spin, 3, nao, nao), source=
z_zero)
306 efactor(i_dir) =
gaussi*e_vec(i_dir)*cmplx(dcos(phi(i_dir)), dsin(phi(i_dir)), kind=
dp)/(2*omega)
312 off_diag_m(i, j) = off_diag_m(i, j) + &
313 momentum(ispin, i_dir, i, j)*efactor(i_dir)
317 DEALLOCATE (momentum)
319 CALL timestop(handle)
321 END SUBROUTINE build_off_diagonal_matrix
332 SUBROUTINE build_diagonal_matrix(qs_env, bs_env, xkp, ispin, f_index, diag_e)
335 REAL(kind=
dp),
DIMENSION(3) :: xkp
336 INTEGER :: ispin, f_index
337 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: diag_e
339 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_diagonal_matrix'
341 INTEGER :: handle, i, n_spin, nao
342 REAL(kind=
dp) :: omega
343 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp1
344 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: e_k
347 CALL timeset(routinen, handle)
351 omega = bs_env%floquet_omega
352 n_spin = bs_env%n_spin
356 ALLOCATE (xkp1(3, 1), source=0.0_dp)
361 diag_e(i, i) = e_k(ispin, 1, i) + f_index*omega
363 DEALLOCATE (xkp1, e_k)
364 CALL timestop(handle)
366 END SUBROUTINE build_diagonal_matrix
379 REAL(kind=
dp),
DIMENSION(3) :: xkp
383 CHARACTER(LEN=*),
PARAMETER :: routinen =
'build_floquet_matrix'
385 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: conj_off_diag_m, diag_e, off_diag_m
386 INTEGER :: f_index, handle, i, i_f, max_f_index, &
387 n_fbands, n_spin, nao
388 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: xkp1
391 CALL timeset(routinen, handle)
396 max_f_index = bs_env%max_floquet_index
397 n_fbands = 1 + 2*max_f_index
398 n_spin = bs_env%n_spin
402 ALLOCATE (xkp1(3, 1), source=0.0_dp)
403 ALLOCATE (diag_e(nao, nao), source=
z_zero)
404 ALLOCATE (off_diag_m(nao, nao), source=
z_zero)
405 ALLOCATE (conj_off_diag_m(nao, nao), source=
z_zero)
407 CALL build_off_diagonal_matrix(qs_env, bs_env, xkp, ispin, off_diag_m)
408 conj_off_diag_m(:, :) = conjg(transpose(off_diag_m(:, :)))
410 floquet_matrix%local_data(:, :) =
z_zero
412 i_f = 1 + (i - 1)*nao
413 f_index = i - max_f_index - 1
414 CALL build_diagonal_matrix(qs_env, bs_env, xkp, ispin, f_index, diag_e)
421 DEALLOCATE (diag_e, off_diag_m, conj_off_diag_m, xkp1)
423 CALL timestop(handle)
437 CHARACTER(LEN=*),
PARAMETER :: routinen =
'check_floquet_conversion'
439 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: vector_block_0, vector_block_1
440 INTEGER :: handle, max_f_index, nao, start_row_0, &
444 CALL timeset(routinen, handle)
449 max_f_index = bs_env%max_floquet_index
451 start_row_0 = 1 + nao*max_f_index
452 start_row_1 = 1 + nao*(max_f_index + 1)
454 ALLOCATE (vector_block_0(3*nao, nao), vector_block_1(3*nao, nao), source=
z_zero)
457 IF (bs_env%eps_floquet > 0)
THEN
458 IF (abs(maxval(abs(vector_block_0)) - maxval(abs(vector_block_1))) > bs_env%eps_floquet)
THEN
459 cpabort(
"FLOQUET DIAGONALIZATION DID NOT CONVERGE. MAX_FLOQUET_INDEX TOO SMALL")
462 DEALLOCATE (vector_block_0, vector_block_1)
463 CALL timestop(handle)
478 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: a_k
480 CHARACTER(LEN=*),
PARAMETER :: routinen =
'calculate_floquet_spectral_function'
482 COMPLEX(KIND=dp) ::
diag
483 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: g00
484 INTEGER :: handle, i, i_e, max_f_index, n_e, nao, &
486 REAL(kind=
dp) :: broad, e_min, energy, energy_step, mu
490 CALL timeset(routinen, handle)
494 CALL get_mo_set(mo_set=mos(1), mu=mu, nao=nao)
496 broad = bs_env%broadening_floquet
497 energy_step = bs_env%energy_step_floquet
498 e_min = mu - bs_env%energy_window_floquet
499 max_f_index = bs_env%max_floquet_index
501 start_row_g00 = 1 + nao*max_f_index
503 ALLOCATE (g00(nao, nao))
504 CALL cp_cfm_create(g_r, floquet_matrix%matrix_struct, set_zero=.true.)
507 energy = e_min + i_e*energy_step
514 a_k(i_e) = -aimag(sum([(g00(i, i), i=1, nao)]))/
pi
520 CALL timestop(handle)
536 INTEGER :: ispin, ikp_for_file
537 REAL(kind=
dp),
DIMENSION(3) :: xkp
538 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: eigenvalues
540 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_quasi_energy'
542 CHARACTER(LEN=default_string_length) :: fname
543 INTEGER :: handle, i, j, n, nao, nkp_start, qunit
544 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: indices, work
545 REAL(kind=
dp) :: fbz_max, fbz_min, omega, qe
546 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: quasi_energies
549 CALL timeset(routinen, handle)
554 nkp_start = bs_env%nkp_only_DOS
555 omega = bs_env%floquet_omega
556 fbz_max = omega/2.0_dp
557 fbz_min = -omega/2.0_dp
559 n =
SIZE(eigenvalues)
560 ALLOCATE (indices(nao), work(nao), quasi_energies(nao))
561 indices(:) = [(i, i=1, nao)]
564 IF (any(indices == j)) cycle
565 IF (abs(eigenvalues(j)) < abs(eigenvalues(indices(i)))) indices(i) = j
568 CALL sort(indices, nao, work)
570 quasi_energies(:) = eigenvalues(indices(:))
572 IF (bs_env%para_env%is_source())
THEN
573 WRITE (fname,
"(2A)") trim(bs_env%floquet_qe_file),
".bs"
574 IF (ikp_for_file == 1)
THEN
575 CALL open_file(trim(fname), unit_number=qunit, file_status=
"REPLACE", &
578 CALL open_file(trim(fname), unit_number=qunit, file_status=
"OLD", &
579 file_action=
"WRITE", file_position=
"APPEND")
582 WRITE (qunit,
"(A)")
"# Quasi-energies obtained by diagonalising the Floquet Hamiltonian"
583 WRITE (qunit,
"(A)")
"# (in units of eV, folded to Floquet Brillouin zone)"
584 WRITE (qunit,
"(A,I0,T10,A,I0,A,T24,3(1X,F14.8))") &
585 "# Spin ", ispin,
" Point ", ikp_for_file,
": ", xkp(1:3)
586 WRITE (qunit,
"(A)")
"# Floquet band Quasi-energy [eV]"
588 qe = quasi_energies(i)
589 WRITE (qunit,
"(I8,F21.8)") i, qe*
evolt
593 DEALLOCATE (indices, work, quasi_energies)
595 CALL timestop(handle)
610 INTEGER :: ispin, ikp_for_file
611 REAL(kind=
dp),
DIMENSION(3) :: xkp
612 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: a_k
614 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_floquet_spectral_function'
616 CHARACTER(LEN=default_string_length) :: fname
617 INTEGER :: handle, i_e, n_e, nkp_start, wunit
618 REAL(kind=
dp) :: e_min, energy, energy_step, mu
621 CALL timeset(routinen, handle)
627 energy_step = bs_env%energy_step_floquet
628 e_min = mu - bs_env%energy_window_floquet
630 nkp_start = bs_env%nkp_only_DOS
632 IF (bs_env%para_env%is_source())
THEN
633 WRITE (fname,
"(2A)") trim(bs_env%floquet_dos_file),
".out"
634 IF (ikp_for_file == 1)
THEN
635 CALL open_file(trim(fname), unit_number=wunit, file_status=
"REPLACE", &
638 CALL open_file(trim(fname), unit_number=wunit, file_status=
"OLD", &
639 file_action=
"WRITE", file_position=
"APPEND")
642 WRITE (wunit,
"(A)") ωπω
"# Floquet Density of States: D(,k) = -1/*Im[Tr_KS(G^R(,k))]"
643 WRITE (wunit,
"(A,I0,T10,A,I0,A,T24,3(1X,F14.8))") &
644 "# Spin ", ispin,
" Point ", ikp_for_file,
": ", xkp(1:3)
645 WRITE (wunit,
"(A)") ω
"#Energy-E_F (eV) A(,k) = DOS (1/eV)"
647 energy = e_min + i_e*energy_step
648 WRITE (wunit,
"(2X,2G13.4)") energy*
evolt, a_k(i_e)/
evolt
653 CALL timestop(handle)
Handles all functions related to the CELL.
subroutine, public get_cell(cell, alpha, beta, gamma, deth, orthorhombic, abc, periodic, h, h_inv, symmetry_id, tag)
Get informations about a simulation cell.
Basic linear algebra operations for complex full matrices.
subroutine, public cp_cfm_scale_and_add(alpha, matrix_a, beta, matrix_b)
Scale and add two BLACS matrices (a = alpha*a + beta*b).
subroutine, public cp_cfm_lu_invert(matrix, info_out)
Inverts a matrix using LU decomposition. The input matrix will be overwritten.
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_get_submatrix(fm, target_m, start_row, start_col, n_rows, n_cols, transpose)
Extract a sub-matrix from the full matrix: op(target_m)(1:n_rows,1:n_cols) = fm(start_row:start_row+n...
subroutine, public cp_cfm_release(matrix)
Releases a full matrix.
subroutine, public cp_cfm_create(matrix, matrix_struct, name, nrow, ncol, set_zero)
Creates a new full matrix with the given structure.
subroutine, public cp_cfm_set_submatrix(matrix, new_values, start_row, start_col, n_rows, n_cols, alpha, beta, transpose)
Set a sub-matrix of the full matrix: matrix(start_row:start_row+n_rows,start_col:start_col+n_cols) = ...
subroutine, public cp_cfm_set_all(matrix, alpha, beta)
Set all elements of the full matrix to alpha. Besides, set all diagonal matrix elements to beta (if g...
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.
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.
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.
subroutine, public build_momentum_matrix(qs_env, xkp, momentum)
...
subroutine, public write_floquet_spectral_function(qs_env, bs_env, ispin, ikp_for_file, xkp, a_k)
...
subroutine, public check_floquet_conversion(qs_env, bs_env, cfm_eigenvectors)
...
subroutine, public calculate_floquet_spectral_function(qs_env, bs_env, floquet_matrix, a_k)
...
subroutine, public calculate_epsilon_derivative(qs_env, xkp, e_k, de_dk)
...
subroutine, public build_floquet_matrix(qs_env, bs_env, xkp, ispin, floquet_matrix)
...
subroutine, public write_quasi_energy(qs_env, bs_env, ispin, ikp_for_file, xkp, eigenvalues)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Implements transformations from k-space to R-space for Fortran array matrices.
subroutine, public rs_to_kp(rs_real, ks_complex, index_to_cell, xkp, deriv_direction, hmat)
Integrate RS matrices (stored as Fortran array) into a kpoint matrix at given kp.
subroutine, public replicate_rs_matrices(rs_dbcsr_in, kpoint_in, rs_array_out, cell_to_index_out)
Convert dbcsr matrices representing operators in real-space image cells to arrays.
Routines needed for kpoint calculation.
subroutine, public kpoint_init_cell_index(kpoint, sab_nl, para_env, nimages)
Generates the mapping of cell indices and linear RS index CELL (0,0,0) is always mapped to index 1.
Types and basic routines needed for a kpoint calculation.
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, inversion_symmetry_only, symmetry_backend, symmetry_reduction_method, gamma_centered)
Retrieve information from a kpoint environment.
subroutine, public kpoint_release(kpoint)
Release a kpoint environment, deallocate all data.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
complex(kind=dp), parameter, public z_one
complex(kind=dp), parameter, public gaussi
complex(kind=dp), parameter, public z_zero
Collection of simple mathematical functions and subroutines.
subroutine, public diag(n, a, d, v)
Diagonalize matrix a. The eigenvalues are returned in vector d and the eigenvectors are returned in m...
subroutine, public geeig_right(a_in, b_in, eigenvalues, eigenvectors)
Solve the generalized eigenvalue equation for complex matrices A*v = B*v*λ
Interface to the message passing library MPI.
Definition of physical constants:
real(kind=dp), parameter, public evolt
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, mimic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs, do_rixs, tb_tblite)
Get the QUICKSTEP environment.
Definition and initialisation of the mo data type.
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.
Calculates the moment integrals <a|r^m|b> and <a|r x d/dr|b>
subroutine, public qs_moment_kpoints_deep(qs_env, xkp, dipole, rcc, berry_c, do_parallel)
Calculates the dipole moments and berry curvature for periodic systems for kpoints.
Define the neighbor list data types and the corresponding functionality.
All kind of helpful little routines.
Type defining parameters related to the simulation cell.
Represent a complex full matrix.
Contains information about kpoints.
stores all the informations relevant to an mpi environment