Plane Stress Linear Elastic #298
-
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 2 replies
-
No, it's just the classical linear elastic material formulation (small-strain linear elasticity; strain tensor as symmetric part of the displacement gradient). Matadi hyperelastic materials are defined on a strain energy function and thus, the small-strain formulation is derived from a strain energy function. This is quite nonsense, but I used it for testing the gradients and hessians of the strain energy function. P.S.: Plane stress is for 2D problems only (e.g. meshes with quads). I'm not really sure what you'd like to evaluate on 3d structures given above. |
Beta Was this translation helpful? Give feedback.
-
Thank you, I were misunderstanding it. So, the reason behind the use of 3D geometry instead of 2D geometry was that it didn't work with me, I mean that I have got an error from casadi when I worked with the second case (quad). But when I changed to the 3D case, it works with no problem. I'm just discovering the Matadi through Felupe. I like working with Felupe because it's easy to use and to understand, so I'm interested in every detail of it. It will become a super FEM tool in the future, thank you. |
Beta Was this translation helpful? Give feedback.
-
This could help (slightly modified code-block of README.md): import felupe as fem
import matadi as mat
# create a hexahedron-region on a cube
region = fem.RegionQuad(fem.Rectangle(n=11))
# add a field container (with displacement field)
field = fem.FieldsMixed(region, n=1)
# apply a uniaxial elongation on the cube
boundaries = fem.dof.uniaxial(field, clamped=True)[0]
# define the constitutive material behaviour and create a solid body
# felupe only ships the linear elastic material formulation for plane stress
# for anything else, code it by yourself or use matadi
umat = fem.LinearElasticPlaneStress(E=1, nu=0.3)
# use `MaterialHyperelasticPlaneStressIncompressible` with any hyperelastic material model of matadi
# (the deformed thickness is evaluated based on the incompressibility constraint `det(F)=1`)
umat = mat.MaterialHyperelasticPlaneStressIncompressible(
mat.models.neo_hooke, C10=0.5 # bulk-modulus not necessary
)
# use `MaterialHyperelasticPlaneStressLinearElastic` only with the linear_elastic material
# (the deformed thickness is evaluated based on the Lamé constants)
umat = mat.MaterialHyperelasticPlaneStressLinearElastic(
mat.models.linear_elastic, mu=1, lmbda=3
)
solid = fem.SolidBody(umat, field)
# prepare a step with substeps
move = fem.math.linsteps([0, 2, -0.4, 0], num=10)
step = fem.Step(
items=[solid],
ramp={boundaries["move"]: move},
boundaries=boundaries
)
# add the step to a job, evaluate all substeps and create a plot
job = fem.CharacteristicCurve(steps=[step], boundary=boundaries["move"])
job.evaluate(filename="result.xdmf")
fig, ax = job.plot(
xlabel="Displacement $u$ in mm $\longrightarrow$",
ylabel="Normal Force $F$ in N $\longrightarrow$",
) |
Beta Was this translation helpful? Give feedback.
No, it's just the classical linear elastic material formulation (small-strain linear elasticity; strain tensor as symmetric part of the displacement gradient). Matadi hyperelastic materials are defined on a strain energy function and thus, the small-strain formulation is derived from a strain energy function. This is quite nonsense, but I used it for testing the gradients and hessians of the strain energy function.
https://github.com/adtzlr/matadi/blob/b63491a86926a37c1efcf80207c55974bc5468b2/matadi/models/_hyperelasticity_isotropic.py#L5-L7
P.S.: Plane stress is for 2D problems only (e.g. meshes with quads). I'm not really sure what you'd like to evaluate on 3d structures given above.