FEniCS / FEniCS/ufl

Differentiation of external operators via `ufl.diff`

Open
#456 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
150
Forks
79
Avg merge
1d 16h
Merged PRs (30d)
10

Description

A user of `dolfinx-externa-operator` spotted that external operators are not differentiable via `ufl.diff`:
```python
N = ExternalOperator(u, function_space=V) # N(u; v')
dNdu = ufl.diff(N, u)
dNdu_expanded = expand_derivatives(dNdu) # error
```

Is there a specific reason why this is not supported by `ufl.ExternalOperator`? Perhaps @dham could assist us with this?

MWE:
```python
import ufl
from ufl.core.external_operator import ExternalOperator
from ufl import Coefficient, Argument, derivative, dx, diff
from ufl.algorithms import expand_derivatives

from ufl.pullback import identity_pullback
from ufl.sobolevspace import H1

from utils import FiniteElement, LagrangeElement

domain = ufl.Mesh(LagrangeElement(ufl.triangle, 1, (2,)))
f1 = FiniteElement("Lagrange", ufl.triangle, 1, (), identity_pullback, H1)
V = ufl.FunctionSpace(domain, f1)

u = Coefficient(V)
N = ExternalOperator(u, function_space=V) # N(u; v')
dNdu = ufl.diff(N, u)
dNdu_expanded = expand_derivatives(dNdu) # error
```

Error message:
```python
ValueError: Missing differentiation handler for type ExternalOperator. Have you added a new type?
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.