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