Axisymmetric Problems#

For axisymmetric analyses an axisymmetric vector-valued field has to be created for the in-plane displacements.

import felupe as fe

mesh = fe.Rectangle(n=3)
region = fe.RegionQuad(mesh)
u = fe.FieldAxisymmetric(region, dim=2)
field = fe.FieldContainer([u])

Now it gets important: The 3x3 deformation gradient for an axisymmetric problem is obtained with felupe.FieldAxisymmetric.grad() or felupe.FieldAxisymmetric.extract() methods. For instances of felupe.FieldAxisymmetric the gradient is modified to return a 3x3 gradient as described in Axisymmetric Analysis.

F = field.extract(grad=True, sym=False, add_identity=True)

For simplicity, let’s assume a (built-in) Neo-Hookean material.

umat = fe.NeoHooke(mu=1, bulk=5)

FElupe provides an adopted felupe.IntegralFormAxisymmetric class for the integration and the sparse matrix assemblage of axisymmetric problems under hood. It uses the additional information (e.g. radial coordinates at integration points) stored in felupe.FieldAxisymmetric to provide a consistent interface in comparison to default IntegralForms.

dA = region.dV

r = fe.IntegralForm(umat.gradient(F), field, dA).assemble()
K = fe.IntegralForm(umat.hessian(F), field, dA, field).assemble()

To sum up, for axisymmetric problems use felupe.FieldAxisymmetric. Of course, Mixed-field formulations may be applied on axisymmetric scenarios too.