@@ -9,39 +9,30 @@ for it to work in the solvers.
99 being ` AbstractArray ` s. Specifically, a SciMLOperator, ` L ` , of size ` (M,N) ` accepts
1010 input argument ` u ` with leading length ` N ` , i.e. ` size(u, 1) == N ` , and returns an
1111 ` AbstractArray ` of the same dimension with leading length ` M ` , i.e. ` size(L * u, 1) == M ` .
12- Internally, ` L ` lazily reshapes ` u ` to a matrix of size ` (N, length(u) \div N) ` and
13- independently acts on the column-vectors. The reshape operation is skipped for
14- ` AbstractVecOrMat ` arguments.
15122 . SciMLOperators can be applied to an ` AbstractArray ` via overloaded ` Base.* ` , or
1613 the in-place ` LinearAlgebra.mul! ` . Additionally, operators are allowed to be time,
1714 or parameter dependent. The state of a SciMLOperator can be updated by calling
1815 the mutating function ` update_coefficients!(L, u, p, t) ` where ` p ` representes
1916 parameters, and ` t ` , time. Calling a SciMLOperator as ` L(du, u, p, t) ` or out-of-place
2017 ` L(u, p, t) ` will automatically update the state of ` L ` before applying it to ` u ` .
18+ ` L(u, p, t) ` is the same operation as ` L(u, p, t) * u ` .
21193 . To support the update functionality, we have lazily implemented a comprehensive operator
2220 algebra. That means a user can add, subtract, scale, compose and invert SciMLOperators,
2321 and the state of the resultant operator would be updated as expected upon calling
2422 ` L(du, u, p, t) ` or ` L(u, p, t) ` so long as an update function is provided for the
2523 component operators.
26- 4 . Out of place ` L = update_coefficients(L, u, p, t) `
27-
2824
2925## AbstractSciMLOperator Interface Description
3026
27+ 1 . ` AbstractSciMLLinearOperator <: AbstractSciMLOperator `
28+ 2 . ` AbstractSciMLScalarOperator <: AbstractSciMLLinearOperator `
31293 . ` isconstant(A) ` trait for whether the operator is constant or not.
32-
33- 2 . Can absorb under multiplication by a scalar. In all algorithms things like
34- ` dt*L ` show up all the time, so the linear operator must be able to absorb
35- such constants.
36- 4 . ` isconstant(A) ` trait for whether the operator is constant or not.
37- 5 . Optional: ` diagonal ` , ` symmetric ` , etc traits from LinearMaps.jl.
38- 6 . Optional: ` exp(A) ` . Required for simple exponential integration.
39- 7 . Optional: ` expv(A,u,t) = exp(t*A)*u ` and ` expv!(v,A::AbstractSciMLOperator,u,t) `
30+ 4 . Optional: ` exp(A) ` . Required for simple exponential integration.
31+ 5 . Optional: ` expv(A,u,t) = exp(t*A)*u ` and ` expv!(v,A::AbstractSciMLOperator,u,t) `
4032 Required for sparse-saving exponential integration.
41- 8 . Optional: factorizations. ` ldiv! ` , ` factorize ` et. al. This is only required
33+ 6 . Optional: factorizations. ` ldiv! ` , ` factorize ` et. al. This is only required
4234 for algorithms which use the factorization of the operator (Crank-Nicolson),
4335 and only for when the default linear solve is used.
44- 1 . ` AbstractSciMLLinearOperator <: AbstractSciMLOperator `
4536
4637## Note About Affine Operators
4738
0 commit comments