Static Propagator
The “static propagator” is just a dummy propagator, which does not propagate the system. The only implemented operation is to update the interactions, as this is necessary in a multi-system calculation, where other systems are propagated by a “real” propagator.
type, extends(propagator_t) :: propagator_static_t
private
end type propagator_static_t
These are used to define the algorithm, which is done in the constructor of the propagator:
function propagator_static_constructor(dt, nsteps) result(this)
FLOAT, intent(in) :: dt
integer, intent(in) :: nsteps
type(propagator_static_t), pointer :: this
integer :: istep
PUSH_SUB(propagator_static_constructor)
allocate(this)
this%start_operation = OP_SKIP
this%final_operation = OP_SKIP
do istep = 1, nsteps
call this%add_operation(OP_UPDATE_COUPLINGS)
call this%add_operation(OP_UPDATE_INTERACTIONS)
end do
call this%add_operation(OP_ITERATION_DONE)
call this%add_operation(OP_REWIND_ALGORITHM)
this%algo_steps = nsteps
this%dt = dt
POP_SUB(propagator_static_constructor)
end function propagator_static_constructor