# Plot undeformed configuration

**URL:** <https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380>\
**Category:** Legacy DOLFIN\
**Tags:** plotting\
**Created:** [April 22, 2024, 6:03pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380 "2024-04-22T18:03:10Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 6:03pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/1 "2024-04-22T18:03:10Z")

</div>

Hi, I’m solving a problem in elasticity and I want to plot the displacement, however when I plot it in the undeformed configuration I obtain a bad plot.  
 ![IMG_6096](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/f/f930c7b833235b1babedd8b91481a083dda8a747.png)  
I’m just using the command plot:  
plot(u)  
plt.show()

Is it possible to obtain a good contour plot for the undeformed configuration?  
If not how can I plot my solution using the contour plot in matplotlib? (I was thinking about using griddata to interpolate, but I don’t know how to do).  
Thanks

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 22, 2024, 6:08pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/2 "2024-04-22T18:08:22Z")

</div>

Without a reproducible example, it is unlikely that you will get any help.

Could you first save it to file and visualize it in Paraview to ensure that it is just the plotting that is bad, and not the solution itself?

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 6:31pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/3 "2024-04-22T18:31:55Z")

</div>

Hi, thank you for your reply.  
I’m just reproducing this example  
[2D Hyper-elasticity — FEniCS solid tutorial 2019.0.2 documentation](https://fenics-solid-tutorial.readthedocs.io/en/latest/2DNonlinearElasticity/2DNonlinearElasticity.html),  
so the answer must be correct. Indeed the plot in the deformed configuration is equal and it is good.  
I have removed ‘displacement’ from fe.plot amd I get this plot not good. I would like to have one plot as the one in the deformed configuration but maintaining the initial undeformed one. How can I do?

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 22, 2024, 6:39pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/4 "2024-04-22T18:39:57Z")

</div>

As I don’t have the mesh, I cannot reproduce it.  
Could you try visualizing it in Paraview, as it is a better visualization engine than matplotlib.  
Note that since you are using the plot command with matplotlib, you can send in various commands to the plot function to tweak the plot.

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 6:53pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/5 "2024-04-22T18:53:53Z")

</div>

Thank you, I have created the mesh just by using mshr. If you want I can write here my code.  
Do you know what command do I have to use in order to have the right colours like this

 ![IMG_6097](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/7/7b9c5cb86bf677d6730a9656b455a8c76f0420c9.jpeg)

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 22, 2024, 7:47pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/6 "2024-04-22T19:47:42Z")

</div>

You havent provided the code, and you have tried my suggestion check by opening it in Paraview. Please try it as a sanity check.

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 8:01pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/7 "2024-04-22T20:01:00Z")

</div>

I am not able to use Paraview, I have always used only the plot tools provided by Fenics or Matplotlib. If you want I can provide my code

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 22, 2024, 8:16pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/8 "2024-04-22T20:16:43Z")

</div>

Please provide the code then. Bote that mshr has been deprecated for a long time.

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 9:58pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/9 "2024-04-22T21:58:36Z")

</div>

```python
from dolfin import *

import fenics as fe

import matplotlib.pyplot as plt

import numpy as np

from mshr import *

#import ufl

fe.set_log_level(13)

# --------------------

# Functions and classes

# --------------------

def bottom(x, on_boundary):

return (on_boundary and fe.near(x[1], 0.0))

# Strain function

def epsilon(u):

return 0.5*(fe.grad(u) + fe.grad(u).T)

# Stress function

def sigma(u):

return lmbda*fe.div(u)*fe.Identity(2) + 2*mu*epsilon(u)

# --------------------

# Parameters

# --------------------

# Lame's constants

#lmbda = 1.25

#mu = 20

E = 20.0e6

mu = 0.5*E

rho_0 = 200.0

l_x, l_y = 5.0, 5.0 # Domain dimensions

n_x, n_y = 500, 500 # Number of elements

# Load

g_int = 1.0e5

b_int = -10.0

# --------------------

# Geometry

# --------------------

#mesh_quad = fe.UnitSquareMesh.create(n_x, n_y, fe.CellType.Type.quadrilateral)

domain = Rectangle(Point(0., 0.), Point(5, 5)) - Circle(Point(2.5, 2.5), 1.8, 100)

mesh = generate_mesh(domain, 500)

fe.plot(mesh)

plt.show()

# Definition of Neumann condition domain

boundaries = fe.MeshFunction("size_t", mesh, mesh.topology().dim() - 1)

boundaries.set_all(0)

top = fe.AutoSubDomain(lambda x: fe.near(x[1], 5.0))

top.mark(boundaries, 1)

ds = fe.ds(subdomain_data=boundaries)

# --------------------

# Function spaces

# --------------------

V = fe.VectorFunctionSpace(mesh, "CG", 1)

u_tr = fe.TrialFunction(V)

u_test = fe.TestFunction(V)

u = fe.Function(V)

g = fe.Constant((0.0, g_int))

b = fe.Constant((0.0, b_int))

N = fe.Constant((0.0, 1.0))

aa, bb, cc, dd, ee = 0.5*mu, 0.0, 0.0, mu, -1.5*mu

# --------------------

# Boundary conditions

# --------------------

bc = fe.DirichletBC(V, fe.Constant((0.0, 0.0)), bottom)

# --------------------

# Weak form

# --------------------

I = fe.Identity(2)

F = I + fe.grad(u) # Deformation gradient

C = F.T*F # Right Cauchy-Green tensor

J = fe.det(F) # Determinant of deformation fradient

#psi = (aa*[fe.tr](http://fe.tr/)(C) + bb*[fe.tr](http://fe.tr/)(ufl.cofac(C)) + cc*J**2 - dd*fe.ln(J))*fe.dx - fe.dot(b, u)*fe.dx + fe.inner(f, u)*ds(1)

#n = fe.dot(ufl.cofac(F), N)

#surface_def = fe.sqrt(fe.inner(n, n))

psi = (aa* fe.inner(F, F) + ee - dd* fe.ln(J))* fe.dx - rho_0* J* fe.dot(b, u)* fe.dx +fe.inner(g,u)* ds(1) #+ surface_def* fe.inner(g, u)* ds(1)

# --------------------

# Solver

# --------------------

Form = fe.derivative(psi, u, u_test)

Jac = fe.derivative(Form, u, u_tr)

problem = fe.NonlinearVariationalProblem(Form, u, bc, Jac)

solver = fe.NonlinearVariationalSolver(problem)

prm = solver.parameters

#prm["newton_solver"]["error_on_convergence"] = False

#fe.solve(Form == 0, u, bc, J=Jac, solver_parameters={"error_on_convergence": False})

solver.solve()

print(np.amax(u.vector()[:]))

# --------------------

# Post-process

# --------------------

fe.plot(u,mode='displacement')

plt.show()

fe.plot(u)

plt.show()

```

That’s my code, if you run it you can see that the first plot provides the deformed configuration correctly, instead in the second the undeformed is not good.  
Do you know what can I change in the second plot command?  
Or you know if it is possible to plot u using matplotlib?

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 22, 2024, 10:01pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/10 "2024-04-22T22:01:27Z")

</div>

I have also avoided to use ufl.cofac because it doesn’t work and I don’t know why

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 23, 2024, 5:26am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/11 "2024-04-23T05:26:33Z")

</div>

Your code isn’t properly formatted. I tried to fix it, but it is missing several indentation. Please Edit it to ensure that the code can be copy pasted by someone and executed with no modification.

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 23, 2024, 10:13am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/12 "2024-04-23T10:13:49Z")

</div>

Ok, I modify it immediately

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 23, 2024, 10:43am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/15 "2024-04-23T10:43:57Z")

</div>

```python
#add code here

from dolfin import *
import fenics as fe
import matplotlib.pyplot as plt
import numpy as np
from mshr import *
#import ufl

fe.set_log_level(13)

# --------------------
# Functions and classes
# --------------------
def bottom(x, on_boundary):
    return (on_boundary and fe.near(x[1], 0.0))

# Strain function
def epsilon(u):
    return 0.5*(fe.grad(u) + fe.grad(u).T)

# Stress function
def sigma(u):
    return lmbda*fe.div(u)*fe.Identity(2) + 2*mu*epsilon(u)

# --------------------
# Parameters
# --------------------
# Lame's constants
#lmbda = 1.25
#mu = 20

E = 20.0e6
mu = 0.5*E
rho_0 = 200.0

l_x, l_y = 5.0, 5.0 # Domain dimensions
n_x, n_y = 500, 500 # Number of elements

# Load
g_int = 1.0e5
b_int = -10.0

# --------------------
# Geometry
# --------------------
#mesh_quad = fe.UnitSquareMesh.create(n_x, n_y, fe.CellType.Type.quadrilateral)
domain = Rectangle(Point(0., 0.), Point(5, 5)) - Circle(Point(2.5, 2.5), 1.8, 100)
mesh = generate_mesh(domain, 500)
fe.plot(mesh)
plt.show()

# Definition of Neumann condition domain
boundaries = fe.MeshFunction("size_t", mesh, mesh.topology().dim() - 1)
boundaries.set_all(0)

top = fe.AutoSubDomain(lambda x: fe.near(x[1], 5.0))

top.mark(boundaries, 1)
ds = fe.ds(subdomain_data=boundaries)

# --------------------
# Function spaces
# --------------------
V = fe.VectorFunctionSpace(mesh, "CG", 1)
u_tr = fe.TrialFunction(V)
u_test = fe.TestFunction(V)
u = fe.Function(V)
g = fe.Constant((0.0, g_int))
b = fe.Constant((0.0, b_int))
N = fe.Constant((0.0, 1.0))

aa, bb, cc, dd, ee = 0.5*mu, 0.0, 0.0, mu, -1.5*mu

# --------------------
# Boundary conditions
# --------------------
bc = fe.DirichletBC(V, fe.Constant((0.0, 0.0)), bottom)

# --------------------
# Weak form
# --------------------
I = fe.Identity(2)
F = I + fe.grad(u) # Deformation gradient
C = F.T*F # Right Cauchy-Green tensor
J = fe.det(F) # Determinant of deformation fradient

#psi = (aa*fe.tr(C) + bb*fe.tr(ufl.cofac(C)) + cc*J**2 - dd*fe.ln(J))*fe.dx - fe.dot(b, u)*fe.dx + fe.inner(f, u)*ds(1)
#n = fe.dot(ufl.cofac(F), N)
#surface_def = fe.sqrt(fe.inner(n, n))
psi = (aa*fe.inner(F, F) + ee - dd*fe.ln(J))*fe.dx - rho_0*J*fe.dot(b, u)*fe.dx +fe.inner(g,u)*ds(1) #+ surface_def*fe.inner(g, u)*ds(1)

# --------------------
# Solver
# --------------------
Form = fe.derivative(psi, u, u_test)
Jac = fe.derivative(Form, u, u_tr)

problem = fe.NonlinearVariationalProblem(Form, u, bc, Jac)
solver = fe.NonlinearVariationalSolver(problem)
prm = solver.parameters
#prm["newton_solver"]["error_on_convergence"] = False
#fe.solve(Form == 0, u, bc, J=Jac, solver_parameters={"error_on_convergence": False})
solver.solve()

print(np.amax(u.vector()[:]))

# --------------------
# Post-process
# --------------------
fe.plot(u,mode='displacement')
plt.show()

```

Thank you Dokken, this should be correct.

I am referring to this  
n = fe.dot(ufl.cofac(F), N)  
surface\_def = fe.sqrt(fe.inner(n, n))

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 23, 2024, 10:47am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/16 "2024-04-23T10:47:03Z")

</div>

Now it should work correctly  
Do you know also why ufl gives an error in the part with # ?

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [April 23, 2024, 11:04am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/17 "2024-04-23T11:04:03Z")

</div>

Again, you need to use 3x` syntax for encapsulation, as you can see above the indentations are all wrong.

example

````python
```python
#add code here
def f(x):
    return x
```

````

Secondly it is unclear what part you are talking about with

> [@HumbertHumbert7](#):
>
> Do you know also why ufl gives an error in the part with # ?

As multiple things are commented out

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [April 23, 2024, 6:42pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/18 "2024-04-23T18:42:28Z")

</div>

Now it should be correct

---

<div class="post-metadata">

**Author:** ![dokken](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/dokken/32/1560_2.png) [@dokken](https://fenicsproject.discourse.group/u/dokken)\
**Post date:** [June 23, 2024, 6:54pm UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/19 "2024-06-23T18:54:19Z")

</div>

This seems like a matplotlib issue, not a DOLFIN issue,as here is the same field shown in Paraview, using:

```python
with fe.XDMFFile("test.xdmf") as xdmf:
    xdmf.write(u)

```

 ![image](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/6/693f9f41c289bd3627d1ca33df20606e619d20ec.png)  
while

```python
plt.figure()
fe.plot(u) # , mode="displacement")
plt.savefig("disp.png")

```

yields  
 ![disp](https://global.discourse-cdn.com/free1/uploads/fenicsproject1/original/2X/e/ee736ea1cbab6677c9ab294dbf76e6ece0e71fa5.png)

---

<div class="post-metadata">

**Author:** ![HumbertHumbert7](https://yyz2.discourse-cdn.com/free1/user_avatar/fenicsproject.discourse.group/humberthumbert7/32/6805_2.png) [@HumbertHumbert7](https://fenicsproject.discourse.group/u/HumbertHumbert7)\
**Post date:** [June 27, 2024, 10:22am UTC](https://fenicsproject.discourse.group/t/plot-undeformed-configuration/14380/20 "2024-06-27T10:22:30Z")

</div>

Thank you, I have solved by deciding to plot the two components of the displacement separately.
