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

Applying force on a particular node on the mesh

0 votes

I am a newbie in fenics and finite element methods.

I try to implement a method to estimate the elasticity parameters (young modulus and poisson ratio) of a deformable object. What I want to do is this:

An object fixed from the bottom(as a start a cube)
To apply an external force on a particular place on the top of the object and using a method like gradient descent etc. estimate the elasticity parameters by comparing the real displacement and estimated displacement.
I am looking over Hyperelasticity demo in fenics (http://fenicsproject.org/documentation/dolfin/1.0.1/python/demo/pde/hyperelasticity/python/documentation.html) but I couldn't figure out how to apply to on a particular node on the mesh and then deform the object based on that force. I think in that demo a force is applied in the -y direction on the whole mesh. There is body force vector:
B = Constant((0.0, -0.5, 0.0))

Should I change this to a vector in the same size with the mesh and put a force value to on the element of the vector which corresponds to the nodal element on the mesh.

Sorry if I don not make much sense. I may ask very trivial questions. This concepts are new for me so I am having troubles in stating what is in my head.

asked Aug 11, 2014 by piro FEniCS Novice (150 points)

1 Answer

–1 vote
 
Best answer

Hi,
In the hyperelastic demo
demo
T is the surface traction (surface force). B is the body force. If you want to only apply the traction on a specific part of the surface, you will have to define that boundary area precisely and use another ds() to apply it.

Applying a dirichlet displacement is easier, and if you use the 'pointwise' method, you can get it at a specific point.

answered Aug 13, 2014 by mwelland FEniCS User (8,410 points)
selected Aug 14, 2014 by piro

Thank you for your answer! That worked.
Is it possible to combine this approach with collision detection? I was looking over to the collision detection demo: demo
As I understand, compute_entity_collisions(tree) returns the list of indices where the two entities collide.
Let's say I get the list of the entity indices and calculated the corresponding area where collision occurs. If I give this area as input to a new boundary definition and apply the traction force there, is it the right way of doing it?

#the area where collusion occurs
a=0.5 
b=0.7
class Obstacle(SubDomain):
    def inside(self, x, on_boundary):
           return (between(x[2],(a,b)) and between(x[0],(a,b)) )

Sorry, I haven't done collision detection, so I really don't know if that is the right (best) way to do that. You might consider posting another question mentioning collision detection in the title to get the right attention.

...