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?
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!