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) SAFE_ALLOCATE(this) this%is_static = .true. this%start_step = OP_SKIP this%final_step = 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_STEP_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