Skip to content
This repository has been archived by the owner on Jul 19, 2023. It is now read-only.

Roadmap for Vector Derivative Operators #153

Open
2 of 6 tasks
xtalax opened this issue Aug 9, 2019 · 1 comment
Open
2 of 6 tasks

Roadmap for Vector Derivative Operators #153

xtalax opened this issue Aug 9, 2019 · 1 comment

Comments

@xtalax
Copy link
Member

xtalax commented Aug 9, 2019

Roadmap for Vector Derivative Operators

Continuing from #146

A checklist on how to allow Vector calculus operations on u::AbstractArray{AbstractArray{T,M}, N}, useful in a lot of physics applications and likely elsewhere.

This is just spitballing to get some ideas that have been floating about written down before I forget them - This would be a fair amount of work, especially writing a mul that can handle arbitrary vector operators efficiently. I'd appreciate feedback and ideas @ChrisRackauckas @ajozefiak @shivin9,

create a VectorDerivativeOperator that wraps a A::DerivativeOperator

  • Create VectorDerivativeOperator - only needs fields for A and component
  • Implement all other methods to get this to behave as an AbstractDiffEqLinearOperator

In both cases

  • Specialised *, mul ldiv convolutions etc. that account for the components
  • A ComposedVectorOperator, with ops::Array{O<:AbstractCompositeOperator, N} which is an array with the same shape as the return eltype of the operator (may be different from the shape of the eltype of u). Each element of ops is a composed DiffEqOperator, which alone would act on some u to give a scalar field. Together, the ops can represent a set of vector/tensor differential equations, returning a vecto/tensor field of any order.
  • Some method overloads to let operators with different sized return eltype play well together
    L = Div()*Curl() as an example should work, even though div(u) is a scalar field and curl(u) a vector field. ComposedVectorOperator will need some smart rules for combining ops in this case.
  • Finally, and critically, a highly optimised mul for the ComposedVectorOperator that can query the ops and fuse at least for I in CartesianIndices(u_interior) in the convolutions.
@ChrisRackauckas
Copy link
Member

I don't get why it would be a DerivativeOperator. Almost none of the functions would apply. It should be its own operator.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants