How to apply point forces to a mesh?

Hello,

I am trying to apply a point force on my mesh but I have been unsuccessful so far. I have modified the code from the FreeFem Modules (3d elasticity case) to fit my application, except I can’t seem to be able to apply any point forces to my mesh. The relevant part of my code is as follows.

varf vElasticity ([ux, uy, uz], [vx, vy, vz])
	= int3d(Th)(
		  Lambda * Divergence(vx, vy, vz) * Divergence(ux, uy, uz)
		+ 2. * Mu * (
			  Epsilon(vx, vy, vz)' * Epsilon(ux, uy, uz)
		)
	)
	+ int3d(Th)(
		  Rho * Gravity * vz
	)
    + int0d(Th, 101)(
        30000*vy + 200000*vx
    )
	+ on(Clamped, ux=0, uy=0, uz=0)
    + on(26, ux=0, uy=0, uz=0)
	;

to my unerstanding int3d is a volume integration over the mesh, so that is why I am able to apply a load correspnding to gravity. This works fine in my code. By this logic shouldn’t int0d be just a point to apply a force to? This method however doesn’t work and I get an error.

Also potentially relevant is that the number 101 refers to point 101 as defined in gmsh from my mesh. I am not sure if this is the proper way to do that though.

How do I fix my code to apply a point force? I am not entirely sure this is the correct approach. Any help is greatly appreciated!

Edit: I removed the int0d lines and got another error when loading my mesh with a point defined.
Fatal error: some vertex are not at least in one element. This could be art of the problem, as it seems Im not defining the point to apply the force to properly. Not sure yet how to fix this

I do not think that the way you are thinking about int0d is physically meaningful. The intNd() functions perform spatial integrations over an N-dimensional domain. See: Quadrature formulae

What you probably want to do is impose a surface force corresponding to an appropriate force density over a small surface region. This will allow a sufficiently fine mesh to resolve the localized stress concentrations in/near the forcing region.

1 Like

Ah ok that makes a lot of sense. I just tested it and it seems to give me the expected result.

Thank you for answering my question!