Time-stepping Krylov: special case for expv_timestep
#378
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As suggested by @ChrisRackauckas, added a special case for$exp(tA)*b$ .
phiv_timestep
which calculates just the first termWe can already do this using
phiv_timestep(!)
alone, but that requires using a n-by-1 matrixB
, which is a bit unintuitive.expv_timestep(!)
is basically a wrapper forphiv_timestep(!)
that allows a vectorb
as input. (Internally it is reshaped to the n-by-1 matrix form).I was initially a bit worried about doing extra work for the special case. After more carefully examining the code for updating the
W
matrix andu
, I found that all the loops are no-ops forp == 0
, so we're not losing performance here.