Octopus
|
Data Types | |
module | lda_u_t |
Class to describe DFT+U parameters. More... | |
Functions/Subroutines | |
subroutine, public | lda_u_init (this, namespace, space, level, gr, ions, st, mc, kpoints, has_phase) |
subroutine | lda_u_init_coulomb_integrals (this, namespace, space, gr, st, psolver, has_phase) |
subroutine, public | lda_u_end (this) |
subroutine, public | lda_u_update_basis (this, space, gr, ions, st, psolver, namespace, kpoints, has_phase) |
subroutine, public | lda_u_update_occ_matrices (this, namespace, mesh, st, hm_base, phase, energy) |
subroutine, public | lda_u_build_phase_correction (this, space, std, boundaries, namespace, kpoints, vec_pot, vec_pot_var) |
Build the phase correction to the global phase for all orbitals. More... | |
subroutine, public | compute_acbno_u_kanamori (this, st, kanamori) |
subroutine, public | lda_u_freeze_occ (this) |
subroutine, public | lda_u_freeze_u (this) |
subroutine, public | lda_u_set_effectiveu (this, Ueff) |
subroutine, public | lda_u_get_effectiveu (this, Ueff) |
subroutine, public | lda_u_set_effectivev (this, Veff) |
subroutine, public | lda_u_get_effectivev (this, Veff) |
subroutine, public | lda_u_write_info (this, iunit, namespace) |
subroutine | lda_u_loadbasis (this, namespace, space, st, mesh, mc, ierr) |
subroutine | build_symmetrization_map (this, ions, gr, st) |
Builds a mapping between the orbital sets based on symmetries. More... | |
subroutine | orbitals_get_symm_weight (os, space, latt, gr, symm, weight) |
Computes the weight of each rotated orbitals in the basis of the same localized subspace. More... | |
subroutine | compute_complex_coulomb_integrals (this, gr, st, psolver, namespace, space) |
subroutine | compute_acbno_u_noncollinear (this, ios, namespace) |
This routine computes the effective U in the non-collinear case. More... | |
subroutine | compute_acbno_v_noncollinear (this, ios) |
This routine computes the effective V in the noncollinear case. More... | |
subroutine, public | dlda_u_apply (this, d, mesh, psib, hpsib) |
subroutine | dupdate_occ_matrices (this, namespace, mesh, st, lda_u_energy, phase) |
This routine computes the values of the occupation matrices. More... | |
subroutine | dsymmetrize_occ_matrices (this, occ) |
Symmetrize the occupation matrices. More... | |
subroutine, public | dcompute_dftu_energy (this, energy, st) |
This routine computes the value of the double counting term in the DFT+U energy. More... | |
subroutine, public | dlda_u_update_potential (this, st) |
This routine computes the potential that, once multiplied by the projector Pmm' and summed over m and m' for all the atoms gives the full Hubbard potential. More... | |
subroutine | dcompute_acbno_u (this, ios, namespace) |
This routine computes the effective U following the expression given in Agapito et al., Phys. Rev. X 5, 011006 (2015) More... | |
subroutine | dcompute_acbno_u_restricted (this) |
This routine computes the effective Uin the spin-unpolarised case. More... | |
subroutine | dcompute_acbno_v (this, ios) |
This routine computes the effective V in the spin-polarized case. More... | |
subroutine | dcompute_acbno_v_restricted (this) |
This routine computes the effective V in the spin-unpolarised case. More... | |
subroutine | dcompute_acbno_u_kanamori (this, kanamori) |
This routine computes the Kanamori U, Up, and J. More... | |
subroutine | dcompute_acbno_u_kanamori_restricted (this, kanamori) |
This routine computes the Kanamori U, Up, and J. More... | |
subroutine | dcompute_coulomb_integrals (this, namespace, space, gr, psolver) |
subroutine, public | dlda_u_commute_r_single (this, mesh, space, d, namespace, ist, ik, psi, gpsi, has_phase) |
subroutine, public | dlda_u_commute_r (this, mesh, space, d, namespace, psib, gpsib) |
This routine computes [r,V_lda+u] . More... | |
subroutine, public | dlda_u_force (this, namespace, space, mesh, st, iq, psib, grad_psib, force, phase) |
subroutine, public | dlda_u_rvu (this, mesh, space, d, namespace, psib, gpsib) |
This routine computes \((r-R_J)V_{\rm DFT+U}|\psi_{n,\mathbf{k}}\rangle\). More... | |
subroutine, public | dlda_u_set_occupations (this, occ) |
subroutine, public | dlda_u_get_occupations (this, occ) |
subroutine | dlda_u_allocate (this, st) |
subroutine | ddft_u_get_weight_projectors (this, os, ios, spin_component, psib, phi_dot_psi, weight) |
Given the dot products \(<phi mp | psi >\), this computes the weight of the DFT+U projectors. More... | |
subroutine, public | zlda_u_apply (this, d, mesh, psib, hpsib) |
subroutine | zupdate_occ_matrices (this, namespace, mesh, st, lda_u_energy, phase) |
This routine computes the values of the occupation matrices. More... | |
subroutine | zsymmetrize_occ_matrices (this, occ) |
Symmetrize the occupation matrices. More... | |
subroutine, public | zcompute_dftu_energy (this, energy, st) |
This routine computes the value of the double counting term in the DFT+U energy. More... | |
subroutine, public | zlda_u_update_potential (this, st) |
This routine computes the potential that, once multiplied by the projector Pmm' and summed over m and m' for all the atoms gives the full Hubbard potential. More... | |
subroutine | zcompute_acbno_u (this, ios, namespace) |
This routine computes the effective U following the expression given in Agapito et al., Phys. Rev. X 5, 011006 (2015) More... | |
subroutine | zcompute_acbno_u_restricted (this) |
This routine computes the effective Uin the spin-unpolarised case. More... | |
subroutine | zcompute_acbno_v (this, ios) |
This routine computes the effective V in the spin-polarized case. More... | |
subroutine | zcompute_acbno_v_restricted (this) |
This routine computes the effective V in the spin-unpolarised case. More... | |
subroutine | zcompute_acbno_u_kanamori (this, kanamori) |
This routine computes the Kanamori U, Up, and J. More... | |
subroutine | zcompute_acbno_u_kanamori_restricted (this, kanamori) |
This routine computes the Kanamori U, Up, and J. More... | |
subroutine | zcompute_coulomb_integrals (this, namespace, space, gr, psolver) |
subroutine, public | zlda_u_commute_r_single (this, mesh, space, d, namespace, ist, ik, psi, gpsi, has_phase) |
subroutine, public | zlda_u_commute_r (this, mesh, space, d, namespace, psib, gpsib) |
This routine computes [r,V_lda+u] . More... | |
subroutine, public | zlda_u_force (this, namespace, space, mesh, st, iq, psib, grad_psib, force, phase) |
subroutine, public | zlda_u_rvu (this, mesh, space, d, namespace, psib, gpsib) |
This routine computes \((r-R_J)V_{\rm DFT+U}|\psi_{n,\mathbf{k}}\rangle\). More... | |
subroutine, public | zlda_u_set_occupations (this, occ) |
subroutine, public | zlda_u_get_occupations (this, occ) |
subroutine | zlda_u_allocate (this, st) |
subroutine | zdft_u_get_weight_projectors (this, os, ios, spin_component, psib, phi_dot_psi, weight) |
Given the dot products \(<phi mp | psi >\), this computes the weight of the DFT+U projectors. More... | |
Variables | |
integer, parameter, public | dft_u_none = 0 |
integer, parameter, public | dft_u_empirical = 1 |
integer, parameter, public | dft_u_acbn0 = 2 |
integer, parameter, public | dft_u_fll = 0 |
integer, parameter, public | dft_u_amf = 1 |
integer, parameter, public | dft_u_mix = 2 |
subroutine, public lda_u_oct_m::lda_u_init | ( | type(lda_u_t), intent(inout), target | this, |
type(namespace_t), intent(in) | namespace, | ||
class(space_t), intent(in) | space, | ||
integer, intent(in) | level, | ||
type(grid_t), intent(in) | gr, | ||
type(ions_t), intent(in), target | ions, | ||
type(states_elec_t), intent(in) | st, | ||
type(multicomm_t), intent(in) | mc, | ||
type(kpoints_t), intent(in) | kpoints, | ||
logical, intent(in) | has_phase | ||
) |
|
private |
subroutine, public lda_u_oct_m::lda_u_end | ( | type(lda_u_t), intent(inout) | this | ) |
subroutine, public lda_u_oct_m::lda_u_update_basis | ( | type(lda_u_t), intent(inout), target | this, |
class(space_t), intent(in) | space, | ||
type(grid_t), intent(in) | gr, | ||
type(ions_t), intent(in), target | ions, | ||
type(states_elec_t), intent(in) | st, | ||
type(poisson_t), intent(in) | psolver, | ||
type(namespace_t), intent(in) | namespace, | ||
type(kpoints_t), intent(in) | kpoints, | ||
logical, intent(in) | has_phase | ||
) |
subroutine, public lda_u_oct_m::lda_u_update_occ_matrices | ( | type(lda_u_t), intent(inout) | this, |
type(namespace_t), intent(in) | namespace, | ||
class(mesh_t), intent(in) | mesh, | ||
type(states_elec_t), intent(inout) | st, | ||
type(hamiltonian_elec_base_t), intent(in) | hm_base, | ||
type(phase_t), intent(in) | phase, | ||
type(energy_t), intent(inout) | energy | ||
) |
subroutine, public lda_u_oct_m::lda_u_build_phase_correction | ( | type(lda_u_t), intent(inout) | this, |
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | std, | ||
type(boundaries_t), intent(in) | boundaries, | ||
type(namespace_t), intent(in) | namespace, | ||
type(kpoints_t), intent(in) | kpoints, | ||
real(real64), dimension(:), intent(in), optional, allocatable | vec_pot, | ||
real(real64), dimension(:, :), intent(in), optional, allocatable | vec_pot_var | ||
) |
subroutine, public lda_u_oct_m::compute_acbno_u_kanamori | ( | type(lda_u_t), intent(in) | this, |
type(states_elec_t), intent(in) | st, | ||
real(real64), dimension(:,:), intent(out) | kanamori | ||
) |
subroutine, public lda_u_oct_m::lda_u_freeze_occ | ( | type(lda_u_t), intent(inout) | this | ) |
subroutine, public lda_u_oct_m::lda_u_freeze_u | ( | type(lda_u_t), intent(inout) | this | ) |
subroutine, public lda_u_oct_m::lda_u_set_effectiveu | ( | type(lda_u_t), intent(inout) | this, |
real(real64), dimension(:), intent(in) | Ueff | ||
) |
subroutine, public lda_u_oct_m::lda_u_get_effectiveu | ( | type(lda_u_t), intent(in) | this, |
real(real64), dimension(:), intent(inout) | Ueff | ||
) |
subroutine, public lda_u_oct_m::lda_u_set_effectivev | ( | type(lda_u_t), intent(inout) | this, |
real(real64), dimension(:), intent(in) | Veff | ||
) |
subroutine, public lda_u_oct_m::lda_u_get_effectivev | ( | type(lda_u_t), intent(in) | this, |
real(real64), dimension(:), intent(inout) | Veff | ||
) |
subroutine, public lda_u_oct_m::lda_u_write_info | ( | type(lda_u_t), intent(in) | this, |
integer, intent(in), optional | iunit, | ||
type(namespace_t), intent(in), optional | namespace | ||
) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
subroutine, public lda_u_oct_m::dlda_u_apply | ( | type(lda_u_t), intent(in) | this, |
type(states_elec_dim_t), intent(in) | d, | ||
class(mesh_t), intent(in) | mesh, | ||
type(wfs_elec_t), intent(in) | psib, | ||
type(wfs_elec_t), intent(inout) | hpsib | ||
) |
|
private |
|
private |
Symmetrize the occupation matrices.
At the moment this is only done for the case of real spherical harmonics using the fact that a rotated spherical harmonic \(Y_m^l\) can be expressed in the basis of the spherical harmonics of the l.
The other cases (complex spherical harmonics, basis from state) are not symmetrized at the moment. The intersite generalized occupation matrices are also not treated at the moment
subroutine, public lda_u_oct_m::dcompute_dftu_energy | ( | type(lda_u_t), intent(inout) | this, |
real(real64), intent(inout) | energy, | ||
type(states_elec_t), intent(in) | st | ||
) |
subroutine, public lda_u_oct_m::dlda_u_update_potential | ( | type(lda_u_t), intent(inout) | this, |
type(states_elec_t), intent(in) | st | ||
) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
subroutine, public lda_u_oct_m::dlda_u_commute_r_single | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
integer, intent(in) | ist, | ||
integer, intent(in) | ik, | ||
real(real64), dimension(:,:), intent(inout), target, contiguous | psi, | ||
real(real64), dimension(:,:,:), intent(inout), target, contiguous | gpsi, | ||
logical, intent(in) | has_phase | ||
) |
subroutine, public lda_u_oct_m::dlda_u_commute_r | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
type(wfs_elec_t), intent(in) | psib, | ||
class(wfs_elec_t), dimension(:), intent(inout) | gpsib | ||
) |
subroutine, public lda_u_oct_m::dlda_u_force | ( | type(lda_u_t), intent(in) | this, |
type(namespace_t), intent(in) | namespace, | ||
class(space_t), intent(in) | space, | ||
class(mesh_t), intent(in) | mesh, | ||
type(states_elec_t), intent(in) | st, | ||
integer, intent(in) | iq, | ||
type(wfs_elec_t), intent(in) | psib, | ||
type(wfs_elec_t), dimension(:), intent(in) | grad_psib, | ||
real(real64), dimension(:, :), intent(inout) | force, | ||
logical, intent(in) | phase | ||
) |
subroutine, public lda_u_oct_m::dlda_u_rvu | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
type(wfs_elec_t), intent(in) | psib, | ||
class(wfs_elec_t), dimension(:), intent(inout) | gpsib | ||
) |
This routine computes \((r-R_J)V_{\rm DFT+U}|\psi_{n,\mathbf{k}}\rangle\).
subroutine, public lda_u_oct_m::dlda_u_set_occupations | ( | type(lda_u_t), intent(inout) | this, |
real(real64), dimension(:), intent(in) | occ | ||
) |
subroutine, public lda_u_oct_m::dlda_u_get_occupations | ( | type(lda_u_t), intent(in) | this, |
real(real64), dimension(:), intent(inout) | occ | ||
) |
|
private |
|
private |
Given the dot products \(<phi mp | psi >\), this computes the weight of the DFT+U projectors.
For DFT+U+V (intersite interaction), the weight also include the intersite part, such that the resulting weight is applied only once to the localized orbitals.
For the spinor case, the weight is defined per spin component, so the last dimension of weight is of size nst_linear
[in] | phi_dot_psi | Dot products \(<phi mp | psi >\) (nspin, norb, nst, norbset) |
[in,out] | weight | Resulting weight (norb, nst_linear) |
subroutine, public lda_u_oct_m::zlda_u_apply | ( | type(lda_u_t), intent(in) | this, |
type(states_elec_dim_t), intent(in) | d, | ||
class(mesh_t), intent(in) | mesh, | ||
type(wfs_elec_t), intent(in) | psib, | ||
type(wfs_elec_t), intent(inout) | hpsib | ||
) |
|
private |
|
private |
Symmetrize the occupation matrices.
At the moment this is only done for the case of real spherical harmonics using the fact that a rotated spherical harmonic \(Y_m^l\) can be expressed in the basis of the spherical harmonics of the l.
The other cases (complex spherical harmonics, basis from state) are not symmetrized at the moment. The intersite generalized occupation matrices are also not treated at the moment
subroutine, public lda_u_oct_m::zcompute_dftu_energy | ( | type(lda_u_t), intent(inout) | this, |
real(real64), intent(inout) | energy, | ||
type(states_elec_t), intent(in) | st | ||
) |
subroutine, public lda_u_oct_m::zlda_u_update_potential | ( | type(lda_u_t), intent(inout) | this, |
type(states_elec_t), intent(in) | st | ||
) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
subroutine, public lda_u_oct_m::zlda_u_commute_r_single | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
integer, intent(in) | ist, | ||
integer, intent(in) | ik, | ||
complex(real64), dimension(:,:), intent(inout), target, contiguous | psi, | ||
complex(real64), dimension(:,:,:), intent(inout), target, contiguous | gpsi, | ||
logical, intent(in) | has_phase | ||
) |
subroutine, public lda_u_oct_m::zlda_u_commute_r | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
type(wfs_elec_t), intent(in) | psib, | ||
class(wfs_elec_t), dimension(:), intent(inout) | gpsib | ||
) |
subroutine, public lda_u_oct_m::zlda_u_force | ( | type(lda_u_t), intent(in) | this, |
type(namespace_t), intent(in) | namespace, | ||
class(space_t), intent(in) | space, | ||
class(mesh_t), intent(in) | mesh, | ||
type(states_elec_t), intent(in) | st, | ||
integer, intent(in) | iq, | ||
type(wfs_elec_t), intent(in) | psib, | ||
type(wfs_elec_t), dimension(:), intent(in) | grad_psib, | ||
real(real64), dimension(:, :), intent(inout) | force, | ||
logical, intent(in) | phase | ||
) |
subroutine, public lda_u_oct_m::zlda_u_rvu | ( | type(lda_u_t), intent(in) | this, |
class(mesh_t), intent(in) | mesh, | ||
class(space_t), intent(in) | space, | ||
type(states_elec_dim_t), intent(in) | d, | ||
type(namespace_t), intent(in) | namespace, | ||
type(wfs_elec_t), intent(in) | psib, | ||
class(wfs_elec_t), dimension(:), intent(inout) | gpsib | ||
) |
This routine computes \((r-R_J)V_{\rm DFT+U}|\psi_{n,\mathbf{k}}\rangle\).
subroutine, public lda_u_oct_m::zlda_u_set_occupations | ( | type(lda_u_t), intent(inout) | this, |
complex(real64), dimension(:), intent(in) | occ | ||
) |
subroutine, public lda_u_oct_m::zlda_u_get_occupations | ( | type(lda_u_t), intent(in) | this, |
complex(real64), dimension(:), intent(inout) | occ | ||
) |
|
private |
|
private |
Given the dot products \(<phi mp | psi >\), this computes the weight of the DFT+U projectors.
For DFT+U+V (intersite interaction), the weight also include the intersite part, such that the resulting weight is applied only once to the localized orbitals.
For the spinor case, the weight is defined per spin component, so the last dimension of weight is of size nst_linear
[in] | phi_dot_psi | Dot products \(<phi mp | psi >\) (nspin, norb, nst, norbset) |
[in,out] | weight | Resulting weight (norb, nst_linear) |
integer, parameter, public lda_u_oct_m::dft_u_empirical = 1 |