# Discontinuous Data in Neumann Boundary Condition

**URL:** <https://fenicsproject.discourse.group/t/discontinuous-data-in-neumann-boundary-condition/1655>\
**Category:** variational formulation\
**Created:** [October 1, 2019, 10:23pm UTC](https://fenicsproject.discourse.group/t/discontinuous-data-in-neumann-boundary-condition/1655 "2019-10-01T22:23:25Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![joh\_annes](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@joh\_annes](https://fenicsproject.discourse.group/u/joh_annes)\
**Post date:** [October 1, 2019, 10:23pm UTC](https://fenicsproject.discourse.group/t/discontinuous-data-in-neumann-boundary-condition/1655/1 "2019-10-01T22:23:25Z")

</div>

Hello,

if I have discontinuous Neumann boundary data, but I guess that FEniCS interpolates these data with a Courant function (that is continuous). This leads to difficulties, for example, the solution to the following problem is u(x,y) = x and should be computed exactly. But the algorithm does not lead to the exact solution. Can I circumvent this issue? Best regards, Johannes

from dolfin import \*

mesh = UnitSquareMesh(4,4)  
f = Expression(‘x[0]’,degree = 1)  
u\_exact = Expression(‘x[0]’,degree = 1)  
g = Expression(’-(x[0]\<=0.000000000001)+(0.99999999999999\<=x[0])’,degree = 0)  
V = FunctionSpace(mesh,‘P’,1)  
u = TrialFunction(V)  
v = TestFunction(V)

a = (dot(grad(u),grad(v)) + u_v)dx  
L = fv_dx + g_v_ds  
u\_h = Function(V)  
solve(a == L, u\_h)

error = assemble((u\_exact-u\_h)\*\*2\*dx)  
print(error)

---

<div class="post-metadata">

**Author:** ![kamensky](https://avatars.discourse-cdn.com/v4/letter/k/e95f7d/32.png) [@kamensky](https://fenicsproject.discourse.group/u/kamensky)\
**Post date:** [October 1, 2019, 11:34pm UTC](https://fenicsproject.discourse.group/t/discontinuous-data-in-neumann-boundary-condition/1655/2 "2019-10-01T23:34:39Z")

</div>

You can directly use spatial coordinates in UFL as follows:

```python
#f = Expression('x[0]',degree = 1)
#u_exact = Expression('x[0]',degree = 1)
#g = Expression('-(x[0]<=0.000000000001)+(0.99999999999999<=x[0])',degree = 0)
x = SpatialCoordinate(mesh)
f = x[0]
u_exact = x[0]
g = conditional(lt(x[0],DOLFIN_EPS),-1.0,
                conditional(gt(x[0],1.0-DOLFIN_EPS),1.0,Constant(0.0)))

```

---

<div class="post-metadata">

**Author:** ![joh\_annes](https://avatars.discourse-cdn.com/v4/letter/j/ecd19e/32.png) [@joh\_annes](https://fenicsproject.discourse.group/u/joh_annes)\
**Post date:** [October 2, 2019, 7:29am UTC](https://fenicsproject.discourse.group/t/discontinuous-data-in-neumann-boundary-condition/1655/3 "2019-10-02T07:29:05Z")

</div>

Hi,

this works fine, thank you.
