Octopus
hamiltonian_elec_oct_m Module Reference

Data Types

type  hamiltonian_elec_t
 

Functions/Subroutines

subroutine, public hamiltonian_elec_init (hm, namespace, space, gr, ions, ext_partners, st, theory_level, xc, mc, kpoints, need_exchange, xc_photons)
 
subroutine, public hamiltonian_elec_end (hm)
 
subroutine hamiltonian_elec_release_copy_owned (hm)
 Release owned pointer targets created by hamiltonian_elec_copy. More...
 
subroutine, public hamiltonian_elec_copy (hm_out, hm_in)
 Deep-copy a hamiltonian_elec_t snapshot. More...
 
subroutine hamiltonian_elec_copy_guard_supported (hm_in)
 Hard-fail guard matrix for unsupported hamiltonian snapshots. More...
 
logical function hamiltonian_elec_hermitian (hm)
 
pure logical function hamiltonian_elec_needs_mgga_term (hm, terms)
 
subroutine hamiltonian_elec_span (hm, delta, emin, namespace)
 
pure logical function, public hamiltonian_elec_inh_term (hm)
 
subroutine, public hamiltonian_elec_set_inh (hm, st)
 
subroutine, public hamiltonian_elec_remove_inh (hm)
 
subroutine, public hamiltonian_elec_adjoint (hm)
 
subroutine, public hamiltonian_elec_not_adjoint (hm)
 
subroutine hamiltonian_elec_update (this, mesh, namespace, space, ext_partners, time)
 (re-)build the Hamiltonian for the next application: More...
 
subroutine, public hamiltonian_elec_update_pot (this, mesh, accumulate)
 Update the KS potential of the electronic Hamiltonian. More...
 
subroutine, public hamiltonian_elec_epot_generate (this, namespace, space, gr, ions, ext_partners, st, time)
 
real(real64) function, public hamiltonian_elec_get_time (this)
 
pure logical function, public hamiltonian_elec_apply_packed (this)
 
subroutine, public zhamiltonian_elec_apply_atom (hm, namespace, space, latt, species, pos, ia, mesh, psi, vpsi)
 
subroutine, public hamiltonian_elec_update_with_ext_pot (this, mesh, space, ext_partners, time, mu)
 This is an extension of "hamiltonian_elec_update_pot" to be used by the CFM4 propagator. It updates the Hamiltonian by considering a weighted sum of the external potentials at times time(1) and time(2), weighted by alpha(1) and alpha(2). More...
 
logical function, public hamiltonian_elec_needs_current (hm, states_are_real)
 
subroutine, public zhamiltonian_elec_apply_all (hm, namespace, gr, st, hst)
 
logical function, public hamiltonian_elec_has_kick (hm)
 
subroutine hamiltonian_elec_set_mass (this, namespace, mass)
 set the effective electron mass, checking whether it was previously redefined. More...
 
subroutine, public hamiltonian_elec_diagonal (hm, mesh, diag, ik)
 
subroutine dhamiltonian_elec_apply (hm, namespace, mesh, psib, hpsib, terms, set_bc)
 
subroutine, public dhamiltonian_elec_apply_batch (hm, namespace, mesh, psib, hpsib, terms, set_bc)
 
subroutine dhamiltonian_elec_external (this, mesh, psib, vpsib)
 
subroutine, public dhamiltonian_elec_apply_single (hm, namespace, mesh, psi, hpsi, ist, ik, terms, set_bc, set_phase)
 
subroutine dh_mgga_terms (hm, mesh, psib, hpsib, lapl_psib)
 Computes the orbital-dependent part of the mGGA potential. More...
 
subroutine, public dvmask (mesh, hm, st)
 
subroutine zhamiltonian_elec_apply (hm, namespace, mesh, psib, hpsib, terms, set_bc)
 
subroutine, public zhamiltonian_elec_apply_batch (hm, namespace, mesh, psib, hpsib, terms, set_bc)
 
subroutine, public zhamiltonian_elec_external (this, mesh, psib, vpsib)
 
subroutine, public zhamiltonian_elec_apply_single (hm, namespace, mesh, psi, hpsi, ist, ik, terms, set_bc, set_phase)
 
subroutine zh_mgga_terms (hm, mesh, psib, hpsib, lapl_psib)
 Computes the orbital-dependent part of the mGGA potential. More...
 
subroutine, public zvmask (mesh, hm, st)
 

Variables

integer, parameter, public length = 1
 
integer, parameter, public velocity = 2
 

Function/Subroutine Documentation

◆ hamiltonian_elec_init()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_init ( type(hamiltonian_elec_t), intent(inout), target  hm,
type(namespace_t), intent(in)  namespace,
class(space_t), intent(in)  space,
type(grid_t), intent(inout), target  gr,
type(ions_t), intent(inout), target  ions,
type(partner_list_t), intent(inout)  ext_partners,
type(states_elec_t), intent(inout), target  st,
integer, intent(in)  theory_level,
type(xc_t), intent(in), target  xc,
type(multicomm_t), intent(in)  mc,
type(kpoints_t), intent(in), target  kpoints,
logical, intent(in), optional  need_exchange,
type(xc_photons_t), intent(in), optional, target  xc_photons 
)

Definition at line 328 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_end()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_end ( type(hamiltonian_elec_t), intent(inout), target  hm)

Definition at line 768 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_release_copy_owned()

subroutine hamiltonian_elec_oct_m::hamiltonian_elec_release_copy_owned ( type(hamiltonian_elec_t), intent(inout), target  hm)
private

Release owned pointer targets created by hamiltonian_elec_copy.

This avoids running the full hamiltonian finalizer on shallow-alias snapshots.

Definition at line 853 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_copy()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_copy ( type(hamiltonian_elec_t), intent(out), target  hm_out,
type(hamiltonian_elec_t), intent(inout)  hm_in 
)

Deep-copy a hamiltonian_elec_t snapshot.

Pointer semantics:

  • ions is cloned and owned by the copy.
  • external/shared pointers (der, xc, xc_photons, kpoints) are aliased.
  • zora is cloned when present.

Definition at line 902 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_copy_guard_supported()

subroutine hamiltonian_elec_oct_m::hamiltonian_elec_copy_guard_supported ( type(hamiltonian_elec_t), intent(in)  hm_in)
private

Hard-fail guard matrix for unsupported hamiltonian snapshots.

Definition at line 1024 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_hermitian()

logical function hamiltonian_elec_oct_m::hamiltonian_elec_hermitian ( class(hamiltonian_elec_t), intent(in)  hm)
private

Definition at line 1065 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_needs_mgga_term()

pure logical function hamiltonian_elec_oct_m::hamiltonian_elec_needs_mgga_term ( class(hamiltonian_elec_t), intent(in)  hm,
integer, intent(in)  terms 
)
private

Definition at line 1077 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_span()

subroutine hamiltonian_elec_oct_m::hamiltonian_elec_span ( class(hamiltonian_elec_t), intent(inout)  hm,
real(real64), dimension(:), intent(in)  delta,
real(real64), intent(in)  emin,
type(namespace_t), intent(in)  namespace 
)
private

Definition at line 1098 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_inh_term()

pure logical function, public hamiltonian_elec_oct_m::hamiltonian_elec_inh_term ( type(hamiltonian_elec_t), intent(in)  hm)

Definition at line 1120 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_set_inh()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_set_inh ( type(hamiltonian_elec_t), intent(inout)  hm,
type(states_elec_t), intent(in)  st 
)

Definition at line 1128 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_remove_inh()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_remove_inh ( type(hamiltonian_elec_t), intent(inout)  hm)

Definition at line 1143 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_adjoint()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_adjoint ( type(hamiltonian_elec_t), intent(inout)  hm)

Definition at line 1157 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_not_adjoint()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_not_adjoint ( type(hamiltonian_elec_t), intent(inout)  hm)

Definition at line 1174 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_update()

subroutine hamiltonian_elec_oct_m::hamiltonian_elec_update ( class(hamiltonian_elec_t), intent(inout)  this,
class(mesh_t), intent(in)  mesh,
type(namespace_t), intent(in)  namespace,
class(space_t), intent(in)  space,
type(partner_list_t), intent(in)  ext_partners,
real(real64), intent(in), optional  time 
)
private

(re-)build the Hamiltonian for the next application:

Definition at line 1192 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_update_pot()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_update_pot ( type(hamiltonian_elec_t), intent(inout)  this,
class(mesh_t), intent(in)  mesh,
logical, intent(in), optional  accumulate 
)

Update the KS potential of the electronic Hamiltonian.

Adds PCM contributions

Adds possible absorbing potential

Definition at line 1419 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_epot_generate()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_epot_generate ( type(hamiltonian_elec_t), intent(inout)  this,
type(namespace_t), intent(in)  namespace,
class(electron_space_t), intent(in)  space,
type(grid_t), intent(in)  gr,
type(ions_t), intent(inout), target  ions,
type(partner_list_t), intent(in)  ext_partners,
type(states_elec_t), intent(inout)  st,
real(real64), intent(in), optional  time 
)

Generates the real-space PCM potential due to nuclei which do not change during the SCF calculation.

Local field effects due to static electrostatic potentials (if they were). The laser and the kick are included in subroutine v_ks_hartree (module v_ks).

Definition at line 1522 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_get_time()

real(real64) function, public hamiltonian_elec_oct_m::hamiltonian_elec_get_time ( type(hamiltonian_elec_t), intent(inout)  this)

Definition at line 1605 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_apply_packed()

pure logical function, public hamiltonian_elec_oct_m::hamiltonian_elec_apply_packed ( class(hamiltonian_elec_t), intent(in)  this)

Definition at line 1613 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_apply_atom()

subroutine, public hamiltonian_elec_oct_m::zhamiltonian_elec_apply_atom ( type(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(space_t), intent(in)  space,
type(lattice_vectors_t), intent(in)  latt,
class(species_t), intent(in)  species,
real(real64), dimension(1:space%dim), intent(in)  pos,
integer, intent(in)  ia,
class(mesh_t), intent(in)  mesh,
complex(real64), dimension(:,:), intent(in)  psi,
complex(real64), dimension(:,:), intent(out)  vpsi 
)
Parameters
[in]psi(grnp_part, hmddim)
[out]vpsi(grnp, hmddim)

Definition at line 1622 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_update_with_ext_pot()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_update_with_ext_pot ( type(hamiltonian_elec_t), intent(inout)  this,
class(mesh_t), intent(in)  mesh,
class(space_t), intent(in)  space,
type(partner_list_t), intent(in)  ext_partners,
real(real64), dimension(1:2), intent(in)  time,
real(real64), dimension(1:2), intent(in)  mu 
)

This is an extension of "hamiltonian_elec_update_pot" to be used by the CFM4 propagator. It updates the Hamiltonian by considering a weighted sum of the external potentials at times time(1) and time(2), weighted by alpha(1) and alpha(2).

Definition at line 1655 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_needs_current()

logical function, public hamiltonian_elec_oct_m::hamiltonian_elec_needs_current ( type(hamiltonian_elec_t), intent(in)  hm,
logical, intent(in)  states_are_real 
)

Definition at line 1849 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_apply_all()

subroutine, public hamiltonian_elec_oct_m::zhamiltonian_elec_apply_all ( type(hamiltonian_elec_t), intent(inout)  hm,
type(namespace_t), intent(in)  namespace,
type(grid_t), intent(in)  gr,
type(states_elec_t), intent(inout)  st,
type(states_elec_t), intent(inout)  hst 
)

Definition at line 1867 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_has_kick()

logical function, public hamiltonian_elec_oct_m::hamiltonian_elec_has_kick ( type(hamiltonian_elec_t), intent(in)  hm)

Definition at line 1914 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_set_mass()

subroutine hamiltonian_elec_oct_m::hamiltonian_elec_set_mass ( class(hamiltonian_elec_t), intent(inout)  this,
type(namespace_t), intent(in)  namespace,
real(real64), intent(in)  mass 
)
private

set the effective electron mass, checking whether it was previously redefined.

Definition at line 1926 of file hamiltonian_elec.F90.

◆ hamiltonian_elec_diagonal()

subroutine, public hamiltonian_elec_oct_m::hamiltonian_elec_diagonal ( type(hamiltonian_elec_t), intent(in)  hm,
class(mesh_t), intent(in)  mesh,
real(real64), dimension(:,:), intent(out), contiguous  diag,
integer, intent(in)  ik 
)
Parameters
[out]diaghpsi(grmeshnp, hmdnspin)

Definition at line 1944 of file hamiltonian_elec.F90.

◆ dhamiltonian_elec_apply()

subroutine hamiltonian_elec_oct_m::dhamiltonian_elec_apply ( class(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
class(batch_t), intent(inout), target  psib,
class(batch_t), intent(inout), target  hpsib,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc 
)
private
Parameters
[in]set_bcIf set to .false. the boundary conditions are assumed to be set previously.

Definition at line 2055 of file hamiltonian_elec.F90.

◆ dhamiltonian_elec_apply_batch()

subroutine, public hamiltonian_elec_oct_m::dhamiltonian_elec_apply_batch ( type(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(inout), target  psib,
type(wfs_elec_t), intent(inout), target  hpsib,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc 
)
Parameters
[in]set_bcIf set to .false. the boundary conditions are assumed to be set previously.

Definition at line 2084 of file hamiltonian_elec.F90.

◆ dhamiltonian_elec_external()

subroutine hamiltonian_elec_oct_m::dhamiltonian_elec_external ( type(hamiltonian_elec_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(in)  psib,
type(wfs_elec_t), intent(inout)  vpsib 
)
private

Definition at line 2299 of file hamiltonian_elec.F90.

◆ dhamiltonian_elec_apply_single()

subroutine, public hamiltonian_elec_oct_m::dhamiltonian_elec_apply_single ( type(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
real(real64), dimension(:,:), intent(inout), target, contiguous  psi,
real(real64), dimension(:,:), intent(inout), target, contiguous  hpsi,
integer, intent(in)  ist,
integer, intent(in)  ik,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc,
logical, intent(in), optional  set_phase 
)
Parameters
[in]istthe index of the state
[in]ikthe index of the k-point
[in,out]psi(grmeshnp_part, hmddim)
[in,out]hpsi(grmeshnp, hmddim)

Definition at line 2348 of file hamiltonian_elec.F90.

◆ dh_mgga_terms()

subroutine hamiltonian_elec_oct_m::dh_mgga_terms ( type(hamiltonian_elec_t), intent(in)  hm,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(inout)  psib,
type(wfs_elec_t), intent(inout)  hpsib,
type(wfs_elec_t), intent(inout)  lapl_psib 
)
private

Computes the orbital-dependent part of the mGGA potential.

This reads as \( L\psi =-\nabla \cdot [\vtau \nabla \psi]\).

It is trivial to show that this operator is self-adjoint. However, this is never the case with finite differences. This is thus reimplemented as L\psi = -1/2(v_\tau \Delta \psi - \psi \Delta[v_\tau] + \Delta [v_\tau \psi]

The same expression was proposed in Richter et al., J. Chem. Phys. 159, 124117 (2023).

Definition at line 2392 of file hamiltonian_elec.F90.

◆ dvmask()

subroutine, public hamiltonian_elec_oct_m::dvmask ( class(mesh_t), intent(in)  mesh,
type(hamiltonian_elec_t), intent(in)  hm,
type(states_elec_t), intent(inout)  st 
)

Definition at line 2442 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_apply()

subroutine hamiltonian_elec_oct_m::zhamiltonian_elec_apply ( class(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
class(batch_t), intent(inout), target  psib,
class(batch_t), intent(inout), target  hpsib,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc 
)
private
Parameters
[in]set_bcIf set to .false. the boundary conditions are assumed to be set previously.

Definition at line 2546 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_apply_batch()

subroutine, public hamiltonian_elec_oct_m::zhamiltonian_elec_apply_batch ( type(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(inout), target  psib,
type(wfs_elec_t), intent(inout), target  hpsib,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc 
)
Parameters
[in]set_bcIf set to .false. the boundary conditions are assumed to be set previously.

Definition at line 2575 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_external()

subroutine, public hamiltonian_elec_oct_m::zhamiltonian_elec_external ( type(hamiltonian_elec_t), intent(in)  this,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(in)  psib,
type(wfs_elec_t), intent(inout)  vpsib 
)

Definition at line 2790 of file hamiltonian_elec.F90.

◆ zhamiltonian_elec_apply_single()

subroutine, public hamiltonian_elec_oct_m::zhamiltonian_elec_apply_single ( type(hamiltonian_elec_t), intent(in)  hm,
type(namespace_t), intent(in)  namespace,
class(mesh_t), intent(in)  mesh,
complex(real64), dimension(:,:), intent(inout), target, contiguous  psi,
complex(real64), dimension(:,:), intent(inout), target, contiguous  hpsi,
integer, intent(in)  ist,
integer, intent(in)  ik,
integer, intent(in), optional  terms,
logical, intent(in), optional  set_bc,
logical, intent(in), optional  set_phase 
)
Parameters
[in]istthe index of the state
[in]ikthe index of the k-point
[in,out]psi(grmeshnp_part, hmddim)
[in,out]hpsi(grmeshnp, hmddim)

Definition at line 2839 of file hamiltonian_elec.F90.

◆ zh_mgga_terms()

subroutine hamiltonian_elec_oct_m::zh_mgga_terms ( type(hamiltonian_elec_t), intent(in)  hm,
class(mesh_t), intent(in)  mesh,
type(wfs_elec_t), intent(inout)  psib,
type(wfs_elec_t), intent(inout)  hpsib,
type(wfs_elec_t), intent(inout)  lapl_psib 
)
private

Computes the orbital-dependent part of the mGGA potential.

This reads as \( L\psi =-\nabla \cdot [\vtau \nabla \psi]\).

It is trivial to show that this operator is self-adjoint. However, this is never the case with finite differences. This is thus reimplemented as L\psi = -1/2(v_\tau \Delta \psi - \psi \Delta[v_\tau] + \Delta [v_\tau \psi]

The same expression was proposed in Richter et al., J. Chem. Phys. 159, 124117 (2023).

Definition at line 2883 of file hamiltonian_elec.F90.

◆ zvmask()

subroutine, public hamiltonian_elec_oct_m::zvmask ( class(mesh_t), intent(in)  mesh,
type(hamiltonian_elec_t), intent(in)  hm,
type(states_elec_t), intent(inout)  st 
)

Definition at line 2933 of file hamiltonian_elec.F90.

Variable Documentation

◆ length

integer, parameter, public hamiltonian_elec_oct_m::length = 1

Definition at line 320 of file hamiltonian_elec.F90.

◆ velocity

integer, parameter, public hamiltonian_elec_oct_m::velocity = 2

Definition at line 320 of file hamiltonian_elec.F90.