Perform nsweep sweeps on level and set qend appropriately.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(pf_imk_t), | intent(inout) | :: | this | Inputs |
||
type(pf_pfasst_t), | intent(inout), | target | :: | pf | PFASST structure |
|
integer, | intent(in) | :: | level_index | which level to sweep on |
||
real(kind=pfdp), | intent(in) | :: | t0 | Time at beginning of time step |
||
real(kind=pfdp), | intent(in) | :: | dt | time step size |
||
integer, | intent(in) | :: | nsweeps | number of sweeps to do |
||
integer, | intent(in), | optional | :: | flags |
subroutine imk_sweep(this, pf, level_index, t0, dt, nsweeps, flags)
use pf_mod_timer
use pf_mod_hooks
!> Inputs
class(pf_imk_t), intent(inout) :: this
type(pf_pfasst_t), intent(inout),target :: pf !! PFASST structure
integer, intent(in) :: level_index !! which level to sweep on
real(pfdp), intent(in ) :: t0 !! Time at beginning of time step
real(pfdp), intent(in ) :: dt !! time step size
integer, intent(in) :: nsweeps !! number of sweeps to do
integer, optional, intent(in) :: flags
!> Local variables
class(pf_level_t), pointer :: lev !! points to current level
this%t0 = t0
this%dt = dt
if (this%rk) then
call rk_step(this, pf, t0, dt)
else if (this%mkrk) then
call mkrk_step(this, pf, t0, dt)
else
call imk_actually_sweep(this, pf, level_index, t0, dt, nsweeps)
end if
end subroutine imk_sweep