Two-dimensional Problems#
For plane-strain and axisymmetric problems a vector-valued field has to be created for the two-dimensional in-plane displacement components.
import felupe as fem
mesh = fem.Rectangle(n=3)
region = fem.RegionQuad(mesh)
displacement = fem.FieldAxisymmetric(region, dim=2)
import felupe as fem
mesh = fem.Rectangle(n=3)
region = fem.RegionQuad(mesh)
displacement = fem.FieldPlaneStrain(region, dim=2)
The 3x3 deformation gradient for axisymmetric and plane-strain two-dimensional problems
is obtained by the grad()
or
extract()
methods (same for
FieldPlaneStrain
). For these two-dimensional fields the gradient is
modified to return a three-dimensional gradient.
field = fem.FieldContainer([displacement])
F = field.extract(grad=True, sym=False, add_identity=True)
For simplicity, let’s use the isotropic hyperelastic NeoHooke
material
model formulation.
umat = fem.NeoHooke(mu=1, bulk=5)
Note
Internally, FElupe provides an adopted low-level
IntegralFormAxisymmetric
class for the integration and the
sparse matrix assemblage of axisymmetric problems. It uses the additional
information (e.g. radial coordinates at integration points) stored in
FieldAxisymmetric
to provide a consistent interface in comparison
to IntegralFormCartesian
. The top-level
IntegralForm
chooses the appropriate low-level integral form based
on the kind of field inside the field container.
dA = region.dV
r = fem.IntegralForm(umat.gradient(F), field, dA).assemble()
K = fem.IntegralForm(umat.hessian(F), field, dA, field).assemble()
To sum up, for axisymmetric problems use FieldAxisymmetric
and for
plane-strain problems use FieldPlaneStrain
. Of course, mixed-field
formulations may also be used with axisymmetric or plane-strain (displacement) fields.