(git:374b731)
Loading...
Searching...
No Matches
soc_pseudopotential_methods.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
10 USE core_ppnl, ONLY: build_core_ppnl
11 USE cp_cfm_types, ONLY: cp_cfm_create,&
23 USE cp_fm_types, ONLY: cp_fm_create,&
27 USE dbcsr_api, ONLY: dbcsr_add,&
28 dbcsr_create,&
29 dbcsr_desymmetrize,&
30 dbcsr_p_type,&
31 dbcsr_set,&
32 dbcsr_type_antisymmetric,&
33 dbcsr_type_no_symmetry
34 USE kinds, ONLY: dp
35 USE mathconstants, ONLY: gaussi,&
36 z_one,&
37 z_zero
48 USE virial_types, ONLY: virial_type
49#include "./base/base_uses.f90"
50
51 IMPLICIT NONE
52
53 PRIVATE
54
55 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'soc_pseudopotential_methods'
56
59
60CONTAINS
61
62! **************************************************************************************************
63!> \brief Compute V^SOC_µν^(α) = ħ/2 < ϕ_µ | sum_ℓ ΔV_ℓ^SO(r,r') L^(α) | ϕ_ν >, α = x, y, z, see
64!> Hartwigsen, Goedecker, Hutter, Eq.(18), (19) (doi.org/10.1103/PhysRevB.58.3641)
65!> Caution: V^SOC_µν^(α) is purely imaginary and Hermitian; V^SOC_µν^(α) is stored as real
66!> dbcsr matrix mat_V_SOC_xyz without symmetry; V^SOC_µν^(α) is stored without
67!> the imaginary unit, i.e. mat_V_SOC_xyz is real and antisymmetric
68!> \param qs_env ...
69!> \param mat_V_SOC_xyz ...
70!> \par History
71!> * 09.2023 created
72! **************************************************************************************************
73 SUBROUTINE v_soc_xyz_from_pseudopotential(qs_env, mat_V_SOC_xyz)
74 TYPE(qs_environment_type), POINTER :: qs_env
75 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_v_soc_xyz
76
77 CHARACTER(LEN=*), PARAMETER :: routinen = 'V_SOC_xyz_from_pseudopotential'
78
79 INTEGER :: handle, nder, xyz
80 LOGICAL :: calculate_forces, use_virial
81 REAL(kind=dp) :: eps_ppnl
82 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
83 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s
84 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: mat_l, mat_l_nosym, mat_pot_dummy, &
85 matrix_dummy
86 TYPE(dft_control_type), POINTER :: dft_control
87 TYPE(neighbor_list_set_p_type), DIMENSION(:), &
88 POINTER :: sab_orb, sap_ppnl
89 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
90 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
91 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
92 TYPE(virial_type), POINTER :: virial
93
94 CALL timeset(routinen, handle)
95
96 NULLIFY (qs_kind_set, dft_control, sab_orb, sap_ppnl, particle_set, atomic_kind_set)
97 CALL get_qs_env(qs_env=qs_env, qs_kind_set=qs_kind_set, dft_control=dft_control, &
98 matrix_s=matrix_s, atomic_kind_set=atomic_kind_set, &
99 particle_set=particle_set, sab_orb=sab_orb, sap_ppnl=sap_ppnl)
100
101 eps_ppnl = dft_control%qs_control%eps_ppnl
102
103 NULLIFY (mat_l)
104 CALL dbcsr_allocate_matrix_set(mat_l, 3, 1)
105 DO xyz = 1, 3
106 ALLOCATE (mat_l(xyz, 1)%matrix)
107 CALL dbcsr_create(mat_l(xyz, 1)%matrix, template=matrix_s(1)%matrix, &
108 matrix_type=dbcsr_type_antisymmetric)
109 CALL cp_dbcsr_alloc_block_from_nbl(mat_l(xyz, 1)%matrix, sab_orb)
110 CALL dbcsr_set(mat_l(xyz, 1)%matrix, 0.0_dp)
111 END DO
112
113 ! get mat_l
114 cpassert(ASSOCIATED(sap_ppnl))
115 nder = 0
116 use_virial = .false.
117 calculate_forces = .false.
118
119 NULLIFY (mat_pot_dummy)
120 CALL dbcsr_allocate_matrix_set(mat_pot_dummy, 1, 1)
121 ALLOCATE (mat_pot_dummy(1, 1)%matrix)
122 CALL dbcsr_create(mat_pot_dummy(1, 1)%matrix, template=matrix_s(1)%matrix)
123 CALL cp_dbcsr_alloc_block_from_nbl(mat_pot_dummy(1, 1)%matrix, sab_orb)
124 CALL dbcsr_set(mat_pot_dummy(1, 1)%matrix, 0.0_dp)
125
126 CALL build_core_ppnl(mat_pot_dummy, matrix_dummy, force, virial, &
127 calculate_forces, use_virial, nder, &
128 qs_kind_set, atomic_kind_set, particle_set, sab_orb, sap_ppnl, &
129 eps_ppnl, nimages=1, basis_type="ORB", matrix_l=mat_l)
130
131 NULLIFY (mat_l_nosym)
132 CALL dbcsr_allocate_matrix_set(mat_l_nosym, 3, 1)
133 DO xyz = 1, 3
134 ALLOCATE (mat_l_nosym(xyz, 1)%matrix)
135 CALL dbcsr_create(mat_l_nosym(xyz, 1)%matrix, template=matrix_s(1)%matrix, &
136 matrix_type=dbcsr_type_no_symmetry)
137 CALL dbcsr_desymmetrize(mat_l(xyz, 1)%matrix, mat_l_nosym(xyz, 1)%matrix)
138
139 END DO
140
141 NULLIFY (mat_v_soc_xyz)
142 CALL dbcsr_allocate_matrix_set(mat_v_soc_xyz, 3, 1)
143 DO xyz = 1, 3
144 ALLOCATE (mat_v_soc_xyz(xyz, 1)%matrix)
145 CALL dbcsr_create(mat_v_soc_xyz(xyz, 1)%matrix, template=matrix_s(1)%matrix, &
146 matrix_type=dbcsr_type_no_symmetry)
147 CALL cp_dbcsr_alloc_block_from_nbl(mat_v_soc_xyz(xyz, 1)%matrix, sab_orb)
148 ! factor 0.5 from ħ/2 prefactor
149 CALL dbcsr_add(mat_v_soc_xyz(xyz, 1)%matrix, mat_l_nosym(xyz, 1)%matrix, 0.0_dp, 0.5_dp)
150 END DO
151
152 CALL dbcsr_deallocate_matrix_set(mat_pot_dummy)
153 CALL dbcsr_deallocate_matrix_set(mat_l_nosym)
155
156 CALL timestop(handle)
157
158 END SUBROUTINE v_soc_xyz_from_pseudopotential
159
160! **************************************************************************************************
161!> \brief Spinor KS-matrix H_µν,σσ' = h_µν,σ*δ_σσ' + sum_α V^SOC_µν^(α)*Pauli-matrix^(α)_σσ', see
162!> Hartwigsen, Goedecker, Hutter, Eq.(18) (doi.org/10.1103/PhysRevB.58.3641)
163!> \param cfm_ks_spinor_ao ...
164!> \param fm_ks ...
165!> \param n_spin ...
166!> \param mat_V_SOC_xyz ...
167!> \param cfm_s_double ...
168!> \param fm_s ...
169!> \param cfm_SOC_spinor_ao ...
170! **************************************************************************************************
171 SUBROUTINE h_ks_spinor(cfm_ks_spinor_ao, fm_ks, n_spin, mat_V_SOC_xyz, cfm_s_double, fm_s, &
172 cfm_SOC_spinor_ao)
173 TYPE(cp_cfm_type) :: cfm_ks_spinor_ao
174 TYPE(cp_fm_type), DIMENSION(:) :: fm_ks
175 INTEGER :: n_spin
176 TYPE(dbcsr_p_type), DIMENSION(:) :: mat_v_soc_xyz
177 TYPE(cp_cfm_type), OPTIONAL :: cfm_s_double
178 TYPE(cp_fm_type), OPTIONAL :: fm_s
179 TYPE(cp_cfm_type), OPTIONAL :: cfm_soc_spinor_ao
180
181 CHARACTER(LEN=*), PARAMETER :: routinen = 'H_KS_spinor'
182
183 INTEGER :: handle, nao, s
184 TYPE(cp_fm_struct_type), POINTER :: str
185
186 CALL timeset(routinen, handle)
187
188 CALL cp_fm_get_info(fm_ks(1), nrow_global=nao)
189
190 CALL create_cfm_double(fm_ks(1), cfm_ks_spinor_ao)
191 CALL cp_cfm_set_all(cfm_ks_spinor_ao, z_zero)
192
193 str => fm_ks(1)%matrix_struct
194
195 s = nao + 1
196
197 CALL add_dbcsr_submat(cfm_ks_spinor_ao, mat_v_soc_xyz(1)%matrix, str, s, 1, z_one, .true.)
198 CALL add_dbcsr_submat(cfm_ks_spinor_ao, mat_v_soc_xyz(2)%matrix, str, s, 1, gaussi, .true.)
199 CALL add_dbcsr_submat(cfm_ks_spinor_ao, mat_v_soc_xyz(3)%matrix, str, 1, 1, z_one, .false.)
200 CALL add_dbcsr_submat(cfm_ks_spinor_ao, mat_v_soc_xyz(3)%matrix, str, s, s, -z_one, .false.)
201
202 IF (PRESENT(cfm_soc_spinor_ao)) THEN
203 CALL cp_cfm_create(cfm_soc_spinor_ao, cfm_ks_spinor_ao%matrix_struct)
204 CALL cp_cfm_to_cfm(cfm_ks_spinor_ao, cfm_soc_spinor_ao)
205 END IF
206
207 CALL add_fm_submat(cfm_ks_spinor_ao, fm_ks(1), 1, 1)
208
209 SELECT CASE (n_spin)
210 CASE (1)
211 CALL add_fm_submat(cfm_ks_spinor_ao, fm_ks(1), s, s)
212 CASE (2)
213 cpassert(SIZE(fm_ks) == 2)
214 CALL add_fm_submat(cfm_ks_spinor_ao, fm_ks(2), s, s)
215 CASE DEFAULT
216 cpabort("We have either one or two spin channels.")
217 END SELECT
218
219 IF (PRESENT(cfm_s_double)) THEN
220 cpassert(PRESENT(fm_s))
221 CALL create_cfm_double(fm_s, cfm_s_double)
222 CALL cp_cfm_set_all(cfm_s_double, z_zero)
223 CALL add_fm_submat(cfm_s_double, fm_s, 1, 1)
224 CALL add_fm_submat(cfm_s_double, fm_s, s, s)
225 END IF
226
227 CALL timestop(handle)
228
229 END SUBROUTINE h_ks_spinor
230
231! **************************************************************************************************
232!> \brief Remove SOC outside of energy window (otherwise, numerical problems arise
233!> because energetically low semicore states and energetically very high
234!> unbound states couple to the states around the Fermi level).
235!> This routine is for mat_V_SOC_xyz being in the atomic-orbital (ao) basis.
236!> \param mat_V_SOC_xyz ...
237!> \param e_win ...
238!> \param fm_mo_coeff ...
239!> \param homo ...
240!> \param eigenval ...
241!> \param fm_s ...
242! **************************************************************************************************
243 SUBROUTINE remove_soc_outside_energy_window_ao(mat_V_SOC_xyz, e_win, fm_mo_coeff, homo, &
244 eigenval, fm_s)
245 TYPE(dbcsr_p_type), DIMENSION(:) :: mat_v_soc_xyz
246 REAL(kind=dp) :: e_win
247 TYPE(cp_fm_type) :: fm_mo_coeff
248 INTEGER :: homo
249 REAL(kind=dp), DIMENSION(:) :: eigenval
250 TYPE(cp_fm_type) :: fm_s
251
252 CHARACTER(LEN=*), PARAMETER :: routinen = 'remove_soc_outside_energy_window_ao'
253
254 INTEGER :: handle, i_glob, iib, j_glob, jjb, nao, &
255 ncol_local, nrow_local, xyz
256 INTEGER, DIMENSION(:), POINTER :: col_indices, row_indices
257 REAL(kind=dp) :: e_homo, e_i, e_j, e_lumo
258 TYPE(cp_fm_type) :: fm_v_ao, fm_v_mo, fm_work
259
260 CALL timeset(routinen, handle)
261
262 CALL cp_fm_create(fm_work, fm_s%matrix_struct)
263 CALL cp_fm_create(fm_v_ao, fm_s%matrix_struct)
264 CALL cp_fm_create(fm_v_mo, fm_s%matrix_struct)
265
266 CALL cp_fm_get_info(matrix=fm_s, &
267 nrow_local=nrow_local, &
268 ncol_local=ncol_local, &
269 row_indices=row_indices, &
270 col_indices=col_indices)
271
272 nao = SIZE(eigenval)
273
274 e_homo = eigenval(homo)
275 e_lumo = eigenval(homo + 1)
276
277 DO xyz = 1, 3
278
279 CALL copy_dbcsr_to_fm(mat_v_soc_xyz(xyz)%matrix, fm_v_ao)
280
281 ! V_MO = C^T*V_AO*C
282 CALL parallel_gemm(transa="N", transb="N", m=nao, n=nao, k=nao, alpha=1.0_dp, &
283 matrix_a=fm_v_ao, matrix_b=fm_mo_coeff, beta=0.0_dp, matrix_c=fm_work)
284
285 CALL parallel_gemm(transa="T", transb="N", m=nao, n=nao, k=nao, alpha=1.0_dp, &
286 matrix_a=fm_mo_coeff, matrix_b=fm_work, beta=0.0_dp, matrix_c=fm_v_mo)
287
288 DO jjb = 1, ncol_local
289 j_glob = col_indices(jjb)
290 DO iib = 1, nrow_local
291 i_glob = row_indices(iib)
292
293 e_i = eigenval(i_glob)
294 e_j = eigenval(j_glob)
295
296 IF (e_i < e_homo - 0.5_dp*e_win .OR. e_i > e_lumo + 0.5_dp*e_win .OR. &
297 e_j < e_homo - 0.5_dp*e_win .OR. e_j > e_lumo + 0.5_dp*e_win) THEN
298 fm_v_mo%local_data(iib, jjb) = 0.0_dp
299 END IF
300
301 END DO
302 END DO
303
304 ! V_AO = S*C*V_MO*C^T*S
305 CALL parallel_gemm(transa="N", transb="T", m=nao, n=nao, k=nao, alpha=1.0_dp, &
306 matrix_a=fm_v_mo, matrix_b=fm_mo_coeff, beta=0.0_dp, matrix_c=fm_work)
307
308 CALL parallel_gemm(transa="N", transb="N", m=nao, n=nao, k=nao, alpha=1.0_dp, &
309 matrix_a=fm_mo_coeff, matrix_b=fm_work, beta=0.0_dp, matrix_c=fm_v_ao)
310
311 CALL parallel_gemm(transa="N", transb="N", m=nao, n=nao, k=nao, alpha=1.0_dp, &
312 matrix_a=fm_s, matrix_b=fm_v_ao, beta=0.0_dp, matrix_c=fm_work)
313
314 CALL parallel_gemm(transa="N", transb="N", m=nao, n=nao, k=nao, alpha=1.0_dp, &
315 matrix_a=fm_work, matrix_b=fm_s, beta=0.0_dp, matrix_c=fm_v_ao)
316
317 CALL copy_fm_to_dbcsr(fm_v_ao, mat_v_soc_xyz(xyz)%matrix)
318
319 END DO
320
321 CALL cp_fm_release(fm_work)
322 CALL cp_fm_release(fm_v_ao)
323 CALL cp_fm_release(fm_v_mo)
324
325 CALL timestop(handle)
326
328
329! **************************************************************************************************
330!> \brief ...
331!> \param cfm_ks_spinor ...
332!> \param e_win ...
333!> \param eigenval ...
334!> \param E_HOMO ...
335!> \param E_LUMO ...
336! **************************************************************************************************
337 SUBROUTINE remove_soc_outside_energy_window_mo(cfm_ks_spinor, e_win, eigenval, E_HOMO, E_LUMO)
338 TYPE(cp_cfm_type) :: cfm_ks_spinor
339 REAL(kind=dp) :: e_win
340 REAL(kind=dp), DIMENSION(:) :: eigenval
341 REAL(kind=dp) :: e_homo, e_lumo
342
343 CHARACTER(LEN=*), PARAMETER :: routinen = 'remove_soc_outside_energy_window_mo'
344
345 INTEGER :: handle, i_glob, iib, j_glob, jjb, &
346 ncol_global, ncol_local, nrow_global, &
347 nrow_local
348 INTEGER, DIMENSION(:), POINTER :: col_indices, row_indices
349 REAL(kind=dp) :: e_i, e_j
350
351 ! Remove SOC outside of energy window (otherwise, numerical problems arise
352 ! because energetically low semicore states and energetically very high
353 ! unbound states couple to the states around the Fermi level).
354 ! This routine is for cfm_ks_spinor being in the molecular-orbital (mo) with
355 ! corresponding eigenvalues "eigenval".
356
357 CALL timeset(routinen, handle)
358
359 CALL cp_cfm_get_info(matrix=cfm_ks_spinor, &
360 nrow_global=nrow_global, &
361 ncol_global=ncol_global, &
362 nrow_local=nrow_local, &
363 ncol_local=ncol_local, &
364 row_indices=row_indices, &
365 col_indices=col_indices)
366
367 cpassert(nrow_global == SIZE(eigenval))
368 cpassert(ncol_global == SIZE(eigenval))
369
370 DO jjb = 1, ncol_local
371 j_glob = col_indices(jjb)
372 DO iib = 1, nrow_local
373 i_glob = row_indices(iib)
374
375 e_i = eigenval(i_glob)
376 e_j = eigenval(j_glob)
377
378 IF (e_i < e_homo - 0.5_dp*e_win .OR. e_i > e_lumo + 0.5_dp*e_win .OR. &
379 e_j < e_homo - 0.5_dp*e_win .OR. e_j > e_lumo + 0.5_dp*e_win) THEN
380 cfm_ks_spinor%local_data(iib, jjb) = 0.0_dp
381 END IF
382
383 END DO
384 END DO
385
386 CALL timestop(handle)
387
389
Define the atomic kind types and their sub types.
Calculation of the non-local pseudopotential contribution to the core Hamiltonian <a|V(non-local)|b> ...
Definition core_ppnl.F:15
subroutine, public build_core_ppnl(matrix_h, matrix_p, force, virial, calculate_forces, use_virial, nder, qs_kind_set, atomic_kind_set, particle_set, sab_orb, sap_ppnl, eps_ppnl, nimages, cell_to_index, basis_type, deltar, matrix_l)
...
Definition core_ppnl.F:89
Represents a complex full matrix distributed on many processors.
subroutine, public cp_cfm_create(matrix, matrix_struct, name)
Creates a new full matrix with the given structure.
subroutine, public cp_cfm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, matrix_struct, para_env)
Returns information about a full matrix.
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...
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.
represent the structure of a full matrix
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_create(matrix, matrix_struct, name, use_sp)
creates a new full matrix with the given structure
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
complex(kind=dp), parameter, public z_one
complex(kind=dp), parameter, public gaussi
complex(kind=dp), parameter, public z_zero
basic linear algebra operations for full matrixes
Define the data structure for the particle information.
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.
Define the quickstep kind type and their sub types.
Define the neighbor list data types and the corresponding functionality.
subroutine, public h_ks_spinor(cfm_ks_spinor_ao, fm_ks, n_spin, mat_v_soc_xyz, cfm_s_double, fm_s, cfm_soc_spinor_ao)
Spinor KS-matrix H_µν,σσ' = h_µν,σ*δ_σσ' + sum_α V^SOC_µν^(α)*Pauli-matrix^(α)_σσ',...
subroutine, public v_soc_xyz_from_pseudopotential(qs_env, mat_v_soc_xyz)
Compute V^SOC_µν^(α) = ħ/2 < ϕ_µ | sum_ℓ ΔV_ℓ^SO(r,r') L^(α) | ϕ_ν >, α = x, y, z,...
subroutine, public remove_soc_outside_energy_window_ao(mat_v_soc_xyz, e_win, fm_mo_coeff, homo, eigenval, fm_s)
Remove SOC outside of energy window (otherwise, numerical problems arise because energetically low se...
subroutine, public remove_soc_outside_energy_window_mo(cfm_ks_spinor, e_win, eigenval, e_homo, e_lumo)
...
subroutine, public add_dbcsr_submat(cfm_mat_target, mat_source, fm_struct_source, nstart_row, nstart_col, factor, add_also_herm_conj)
...
subroutine, public add_fm_submat(cfm_mat_target, fm_mat_source, nstart_row, nstart_col)
...
subroutine, public create_cfm_double(fm_orig, cfm_double)
...
Provides all information about an atomic kind.
Represent a complex full matrix.
keeps the information about the structure of a full matrix
represent a full matrix
Provides all information about a quickstep kind.