Forum Message

 

 

We have moved the forum to https://forum.ngsolve.org . This is an archived version of the topics until 05/05/23. All the topics were moved to the new forum and conversations can be continued there. This forum is just kept as legacy to not invalidate old links. If you want to continue a conversation just look for the topic in the new forum.

Notice

The forum is in read only mode.

LinearForm and SymbolicLFI

More
4 years 10 months ago #1664 by LilBeng
Hi,

I'm trying to solve the problem of linear elasticity ( similar to this ), and then there is one question.
If I apply force to a line, is it considered distributed or concentrated? Do I need to divide the force components by the length of the line?
Code:
def _stress(u, mu, lam, grid_mesh): return 2 * mu * _epsilon(u) + lam * Trace(_epsilon(u)) * Id(grid_mesh.dim) def _epsilon(u): return 0.5 * (u.Deriv().trans + u.Deriv()) # length 'bottom' = 0.5 length = 0.5 force_1 = CoefficientFunction((0 / length, 100 / length)) coef_mu = [1 / 2 * (E[mat] / (1 + nu[mat])) for mat in grid_mesh.GetMaterials()] coef_lam = [E[mat] * nu[mat] / ((1 + nu[mat]) * (1 - 2 * nu[mat])) for mat in grid_mesh.GetMaterials()] solve_func = H1(grid_mesh, order=3, dirichlet='top', dim=grid_mesh.dim) u, v = solve_func.TrialFunction(), solve_func.TestFunction() mu = CoefficientFunction(coef_mu) lam = CoefficientFunction(coef_lam) bform = BilinearForm(solve_func) bform += SymbolicBFI(2 * mu * InnerProduct(_epsilon(u), _epsilon(v)) + lam * Trace(u.Deriv()) * Trace(v.Deriv())) lform = LinearForm(solve_func) lform += SymbolicLFI(force_1 * v, definedon=grid_mesh.Boundaries('bottom')) bform.Assemble() lform.Assemble() grid = GridFunction(solve_func, name='grid_1') grid.vec.data = bform.mat.Inverse(solve_func.FreeDofs()) * lform.vec displacement = grid deformation = _epsilon(grid) stress = _stress(grid, mu, lam, grid_mesh) Draw(displacement)
I am also interested in a unit of measurement of displacements, mm or m?
I hope you will help me, thank you!
More
4 years 9 months ago #1674 by mneunteufel
Hi LilBeng,

with
Code:
SymbolicLFI(force * v, definedon=grid_mesh.Boundaries('bottom'))
you apply a force with the density "force".

If you want to have a point load
Code:
SymbolicLFI(force * v, definedon=grid_mesh.BBoundaries('some_point'))
you could use an approximation of the Dirac Delta distribution
Code:
SymbolicLFI(approx_delta_eps * v, definedon=grid_mesh.Boundaries('bottom'), bonus_intorder=8)

For a gravity force you would write
Code:
SymbolicLFI(9.81 * v)
without dividing through the area.

NGSolve does not use units internally. If you define a rectangle with L=2, W=1 then the resulting displacement has the same "unit" as L.
I would recommend using SI units ( L=2m), non-dimensionalize the equation or compute the resulting units on paper before.

I hope this answers your questions.

Best
Michael
The following user(s) said Thank You: LilBeng
More
4 years 9 months ago #1679 by LilBeng
Replied by LilBeng on topic LinearForm and SymbolicLFI
Thank you Michael!
Time to create page: 0.174 seconds