This is a read only copy of the old FEniCS QA forum. Please visit the new QA forum to ask questions

Confused with this simple variational formulation for elasticity

+2 votes

Hi, I was studying the variational formulation of static linear elasticity and I came across these 4 different methods of implementation from different published sources. However, I am not sure if am clearly able to make out the difference in implementation. Can some help?

** lmbda and mu are known constants, while u = trial func. and v = test func.

So, the question is why in the definition of sigma, some time they use the test function 'v' and sometimes 'u'?....and then in the main equation, once they use grad(v), in another one they used epsilon(v) and in another sym(grad(v))? Am I missing out on a basic concept here?

This is from page 69 of fenics documentation

def epsilon(v):     \\ The strain tensor
return 0.5*(grad(v) + transp(grad(v)))

def sigma(v):       \\ The stress tensor
return 2*mu*epsilon(v) + lmbda*mult(trace(epsilon(v)), Identity(len(v)))

a = dot(grad(v), sigma(u))*dx
L = dot(v, f)*dx

and this: from Page 100 of this thesis

def epsilon (v ):
return 0.5*( grad (v ) + grad (v ).T )

def sigma ( v):
return 2.0*mu*epsilon (v) + lmbda*tr( epsilon(v) )*Identity(v.cell ().d)

a = inner ( sigma (u) , epsilon (v))*dx
L = inner (f , v )*dx

and this from page 579 of Fenics Book

sigma = 2*mu*sym(grad(u)) + lmbda*tr(grad(u))*Identity(v.cell().d)

F = inner(sigma, grad(v))*dx - dot(b, v)*dx

and this from page 114 of Fenics Manual

def sigma(v):
return 2.0*mu*sym(grad(v)) + lmbda*tr(sym(grad(v)))*Identity(v.cell().d)

a = inner(sigma(u), sym(grad(v)))*dx
L = dot(f, v)*dx
asked Sep 9, 2015 by Chaitanya_Raj_Goyal FEniCS User (4,150 points)
edited Sep 9, 2015 by Chaitanya_Raj_Goyal

2 Answers

+1 vote
 
Best answer

The strain tensor, and consequently, the stress tensor depends of the displacement of the solid. In the documentation, the strain and stress tensors it's defined as user-defined operator. By example

def epsilon(v): 
       return 0.5*(grad (v) + grad (v).T )

is an operator which argument is v. Thus, if u is the trial function (the displacement) , then epsilon(u) is equal to

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

Sorry for my bad english.

answered Sep 9, 2015 by hernan_mella FEniCS Expert (19,460 points)
selected Sep 22, 2015 by Chaitanya_Raj_Goyal

Hello Hernan, Thanks for your reply.

1) Will epsilon(u) not be equal to 0.5*(grad (u) + grad (u).T ) ?

1) In the third link (fenics book), in definition of sigma, why do they use grad(u) when they use grad(v) in other three formulations.

2) If you look at the main equation coded in the four documents, are you implying that, grad(v) = epsilon(v) = sym(grad(v))

3) In LSH (a) of the main equation, does in matter if I write sigma or sigma(u)?

Thanks for your help and time.

1.a) Yes (the original answer was modified).

1.b) Because in the other three formulations sigma it defined as an user-defined operator (see page 49 of the ufl-user manual) which subsequently is evaluated on u, while in the third link sigma it defined as a "simple" expression that depend on u.

2) epsilon(v) = sym(grad(v)) ~= grad(v), but inner(sigma(u),epsilon(v)) = inner(sigma(u)),sym(grad(v))) = inner(sigma(u),grad(v)).

3) It depends on how you define sigma (as an user-defined operator or as a "simple" expression).

HI hernan_mella, Thanks!

I also have some conceptual doubts regarding this formulation.

1) Now, 'u' is unknown at the beginning when sigma(u) is defined and used in bilinear formulation,.... thereafter 'u' is computed as solution from a = L. So how can sigma(u) exist before 'u' is computed. Are we finding displacement from stress or stress from displacement? I am just not able to physically visualise what's going on here.

We are finding only the displacements, because this problem has been defined as a function of $u$ (the displacement) through the stress-deformation relation
$\sigma(u) = C:\varepsilon(u)$
and the deformation-displacement relation
$\varepsilon(u) = \frac{1}{2}((\nabla u) + (\nabla u)^T)$.
If you calculate the values of $u$, then is possible to find explicitly the values of $\sigma$.

+1 vote

The use of TrialFunction and TestFunction defines a bilinear form which will be assembled as a stiffness matrix K.

Since the Cauchy stress tensor is symmetric, hence inner(sigma, grad(u))=inner(sigma,sym(grad(u))).

answered Sep 9, 2015 by tianyikillua FEniCS User (1,620 points)

Hello tianyikillua, Thanks for your reply. That I agree with, but my doubts are:

1) In the third link (fenics book), in definition of sigma, why do they use grad(u) when they use grad(v) in all other documents.

2) Looking at the main equation from 4 documents, are you implying that, grad(v) = epsilon(v) = sym(grad(v))

3) In LSH (a) of the equation, does in matter if I write sigma or sigma(u)?

Thanks for your help and time.

...