@@ -206,6 +206,11 @@ function SciMLOperators.update_coefficients(L::ScalarOperator, u, p, t; kwargs..
206206 return ScalarOperator (L. update_func (L. val, u, p, t; kwargs... ), L. update_func)
207207end
208208
209+ # Copy method to avoid aliasing
210+ function Base. copy (L:: ScalarOperator )
211+ ScalarOperator (L. val, L. update_func)
212+ end
213+
209214# Add ScalarOperator specific implementations for the new interface
210215function (α:: ScalarOperator )(v:: AbstractArray , u, p, t; kwargs... )
211216 α = update_coefficients (α, u, p, t; kwargs... )
@@ -313,6 +318,12 @@ function (α::AddedScalarOperator)(
313318end
314319
315320getops (α:: AddedScalarOperator ) = α. ops
321+
322+ # Copy method to avoid aliasing
323+ function Base. copy (L:: AddedScalarOperator )
324+ AddedScalarOperator (map (copy, L. ops))
325+ end
326+
316327has_ldiv (α:: AddedScalarOperator ) = ! iszero (convert (Number, α))
317328has_ldiv! (α:: AddedScalarOperator ) = has_ldiv (α)
318329
@@ -432,6 +443,12 @@ function (α::ComposedScalarOperator)(
432443end
433444
434445getops (α:: ComposedScalarOperator ) = α. ops
446+
447+ # Copy method to avoid aliasing
448+ function Base. copy (L:: ComposedScalarOperator )
449+ ComposedScalarOperator (map (copy, L. ops))
450+ end
451+
435452has_ldiv (α:: ComposedScalarOperator ) = all (has_ldiv, α. ops)
436453has_ldiv! (α:: ComposedScalarOperator ) = all (has_ldiv!, α. ops)
437454
@@ -506,6 +523,12 @@ function (α::InvertedScalarOperator)(
506523 mul! (w, α, v, a, b)
507524end
508525getops (α:: InvertedScalarOperator ) = (α. λ,)
526+
527+ # Copy method to avoid aliasing
528+ function Base. copy (L:: InvertedScalarOperator )
529+ InvertedScalarOperator (copy (L. λ))
530+ end
531+
509532has_ldiv (α:: InvertedScalarOperator ) = has_mul (α. λ)
510533has_ldiv! (α:: InvertedScalarOperator ) = has_ldiv (α)
511534#
0 commit comments