The adaptive solution of the equations of time-harmonic linear elasticity on unstructured meshes
The aim of this tutorial is to demonstrate the adaptive solution of the time-harmonic equations of linear elasticity in cartesian coordinates on unstructured meshes.
The driver code is very similar to the one presented in another tutorial and we only discuss the changes necessary to deal with the generation of the unstructured mesh and the assignment of different material properties to different parts of the domain.
A test problem: Time-harmonic oscillations of an elastic annulus reinforced by a T-rib
The sketch below shows the problem setup: A 2D elastic annulus which is reinforced with two T-ribs is subjected to a time-periodic pressure load of magnitude
(where is the polar angle) along its outer edge. The parameter controls the "sharpness" of the pressure load. For we obtain a uniform, axisymmetric load; the sketch below shows the pressure distribution (red vectors indicating the traction) for
Sketch of the problem setup.
The structure is symmetric and we only discretise the right half ( ) of the domain and apply symmetry conditions (zero horizontal displacement) on the axis.
Results
The figure below shows an animation of the structure's time-harmonic oscillation. The blue shaded region shows the shape of the oscillating structure while the pink region shows its initial configuration. The left half of the plot is used to show the (mirror image of the) adaptive unstructured mesh on which the solution was computed:
Animation of the time-harmonic deformation.
This looks very pretty and shows that we can compute in non-trivial geometries but should you believe the results? Here's an attempt to convince you: If we make the rib much softer than the annulus, the rib will not offer much structural resistance and the annular region will deform as if the rib was not present. If we then set we apply an axisymmetric forcing onto the structure and would expect the resulting displacement field (at least in the annular region) to be axisymmetric. For this case it is easy to find an analytical solution to the problem. The next two figures show a comparison between the analytical (green spheres) and computed solutions (shaded) for the real part of the horizontal and vertical displacements, respectively.
Real part of the horizontal displacement, computed (shaded) and exact (spheres).
Real part of the vertical displacement, computed (shaded) and exact (spheres).
Convinced?
The numerical solution
The driver code for this problem is very similar to the one discussed in another tutorial. Running sdiff on the two driver codes
shows you the differences, the most important of which are:
The provision of multiple elasticity tensors and frequency parameters for the two different regions (the rib and the annulus).
The provision of a helper function complete_problem_setup() which rebuilds the elements (by passing the problem parameters to the elements) following the unstructured mesh adaptation. (The need/rationale for such a function is discussed in another tutorial.)
The mesh generation – the specification of the curvilinear boundaries and the geometry of the rib is somewhat tedious. We refer to another tutorial for a discussion of how to define the internal mesh boundary that separates the two regions (the rib and the annular region) so that we can assign different material properties to them.
.
All of this is reasonably straightforward and provides a powerful code that automatically adapts the mesh while respecting the curvilinear boundaries of the domain. Have a look through the driver code and play with it.