Octopus
propagator_etrs_oct_m Module Reference

Functions/Subroutines

subroutine, public td_etrs (ks, namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc)
 Propagator with enforced time-reversal symmetry, ETRS. More...
 
subroutine td_etrs_independent_particles (namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc)
 Propagator with enforced time-reversal symmetry for independent particles. More...
 
subroutine td_etrs_predictor (ks, namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc)
 ETRS predictor step. More...
 
subroutine, public td_etrs_sc (ks, namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc, sctol, scsteps)
 Propagator with enforced time-reversal symmetry and self-consistency. More...
 
subroutine, public td_aetrs (namespace, space, hm, gr, st, tr, time, dt, ions_dyn, ions, ext_partners, mc)
 Propagator with approximate enforced time-reversal symmetry. More...
 
subroutine, public td_aetrs_sc (ks, namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc, sctol, scsteps)
 Propagator with approximate enforced time-reversal symmetry and self-consistency. More...
 
subroutine, public td_caetrs (ks, namespace, space, hm, ext_partners, gr, st, tr, time, dt, ions_dyn, ions, mc)
 Propagator with approximate enforced time-reversal symmetry. More...
 

Function/Subroutine Documentation

◆ td_etrs()

subroutine, public propagator_etrs_oct_m::td_etrs ( type(v_ks_t), intent(inout)  ks,
type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc 
)

Propagator with enforced time-reversal symmetry, ETRS.

Due to time-reversal symmetry, propagating backwards by \(\Delta t/2\) starting from \(\psi_{j,n+1}\) should lead to the same result as propagating forwards by \(\Delta t/2\) starting from \(\psi_{j,n}\). Using the simplest approximation to the evolution operator, the propagated states are defined as:

\[ \psi_{j,n+1} = e^{-i(\Delta t/2)\tilde{H}_{n+1}} e^{-i(\Delta t/2)H_n} \psi_{j,n}, \]

which can be expressed in terms of the half-step orbitals \(\psi_{j,n+1/2}\) from td_etrs_predictor:

\[ \psi_{j,n+1} = e^{-i(\Delta t/2)\tilde{H}_{n+1}} \psi_{j,n+1/2}, \]

where \(n\) labels discrete time steps, and \(\tilde{H}_{n+1}\) is the approximate Hamiltonian at time \(t_{n+1} = t_n + \Delta t\). This is constructed from the predictor density and (when appropriate) orbitals.

Parameters
[in,out]mcindex and domain communicators

Definition at line 182 of file propagator_etrs.F90.

◆ td_etrs_independent_particles()

subroutine propagator_etrs_oct_m::td_etrs_independent_particles ( type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc 
)
private

Propagator with enforced time-reversal symmetry for independent particles.

Parameters
[in,out]mcindex and domain communicators

Definition at line 215 of file propagator_etrs.F90.

◆ td_etrs_predictor()

subroutine propagator_etrs_oct_m::td_etrs_predictor ( type(v_ks_t), intent(inout)  ks,
type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc 
)
private

ETRS predictor step.

Propagate the current KS orbitals twice. Once by a half step:

\[ \psi_{j,n+1/2} = e^{-i(\Delta t/2)H_n} \psi_{j,n}, \]

and once by a full step:

\[ \tilde{\psi}_{j,n+1} = e^{-i\Delta t H_n} \psi_{j,n}, \]

\( \tilde{\psi}_{j,n+1} \) estimate the end point orbitals, and are used to define the predictor density:

\[ \tilde{\rho}_{n+1}(\mathbf r) = \sum_j f_j |\tilde{\psi}_{j,n+1}(\mathbf r)|^2. \]

Todo:
KS inversion and orbital-dependent photon contributions require additional modifications, followed by testing. As it stands, they currently receive half-step orbitals.
Parameters
[in,out]mcindex and domain communicators

Definition at line 275 of file propagator_etrs.F90.

◆ td_etrs_sc()

subroutine, public propagator_etrs_oct_m::td_etrs_sc ( type(v_ks_t), intent(inout)  ks,
type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc,
real(real64), intent(in)  sctol,
integer, intent(out), optional  scsteps 
)

Propagator with enforced time-reversal symmetry and self-consistency.

Parameters
[in,out]mcindex and domain communicators

Definition at line 345 of file propagator_etrs.F90.

◆ td_aetrs()

subroutine, public propagator_etrs_oct_m::td_aetrs ( type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(partner_list_t), intent(in)  ext_partners,
type(multicomm_t), intent(inout)  mc 
)

Propagator with approximate enforced time-reversal symmetry.

Parameters
[in,out]mcindex and domain communicators

Definition at line 462 of file propagator_etrs.F90.

◆ td_aetrs_sc()

subroutine, public propagator_etrs_oct_m::td_aetrs_sc ( type(v_ks_t), intent(inout)  ks,
type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc,
real(real64), intent(in)  sctol,
integer, intent(out), optional  scsteps 
)

Propagator with approximate enforced time-reversal symmetry and self-consistency.

Parameters
[in,out]mcindex and domain communicators

Definition at line 507 of file propagator_etrs.F90.

◆ td_caetrs()

subroutine, public propagator_etrs_oct_m::td_caetrs ( type(v_ks_t), intent(inout)  ks,
type(namespace_t), intent(in)  namespace,
type(electron_space_t), intent(in)  space,
type(hamiltonian_elec_t), intent(inout)  hm,
type(partner_list_t), intent(in)  ext_partners,
type(grid_t), intent(inout)  gr,
type(states_elec_t), intent(inout)  st,
type(propagator_base_t), intent(inout)  tr,
real(real64), intent(in)  time,
real(real64), intent(in)  dt,
type(ion_dynamics_t), intent(inout)  ions_dyn,
type(ions_t), intent(inout)  ions,
type(multicomm_t), intent(inout)  mc 
)

Propagator with approximate enforced time-reversal symmetry.

Parameters
[in,out]mcindex and domain communicators

Definition at line 601 of file propagator_etrs.F90.