Elastons: Basics

I’ll start my reading at section 3 of the paper, since it defines the basic notation used throughout the paper.

Undeformed positions

What we want to do is compute how an object is deformed during a simulation. For this purpose, we have to take the undeformed positions as the starting point. They are referred to as a \bar{x}(\theta), with \theta being a vector in curvilinear coordinates. The \bar{x}(\theta) are defined for the material domain \Omega, meaning that we have the undeformed positions of all particles making up the object.

One thing that made me think here is that the coordinates are curvilinear. Examples of curvilinear coordinates are cylinder or spherical coordinates, which are examples for the general property of curvilinear coordinates being defined over axes that are not straight as in Cartesian coordinates. Now, from googling a bit and remembering some conversations e.g. with people studying mechanical engineering, I guess that using curvilinear coordinates can make some equations easier. However, I guess it’s not really important to understand at this point since in section 9.1 the authors state that their implementation doesn’t use curvilinear coordinates.

Deformations

The change in position of the object’s particles is captured by the equation

x(\theta) = \bar{x}(\theta) + u(\theta)

which defines u as the deformations. This shows that, when displaying the body at some point, we will be using the undeformed positions and add the deformations u to them.

One thing that I’m not sure about practically is whether the undeformed positions are adjusted at some point. What I mean is that we will begin the simulation with the object in one place and undeformed. Then, the simulation starts. Let’s say the object is hanging in mid-air and drops to the ground due to gravity. This means that the displacements will initially all point downwards. Eventually, the object would have fallen (i.e. moved away from the undeformed position for some time) and therefore globally has a completely different position that initially.

For several purposes (collision detection, culling, …) it would be desirable to know where the object actually is at any point in time. Otherwise, it could be moved away far from it’s undeformed position. I guess one way of doing this is keeping track of the object’s center and adjusting the undeformed and deformed positions from time to time.

Strain

The next definition is that of strain. To quote wikipedia, strain is “the geometrical measure of deformation representing the relative displacement between particles in the material body.” The equation for strain given in the paper is

\epsilon_{ij} = \frac{1}{2} ( u_{,i} \cdot \bar{x}_{,j} + \bar{x}_{,i} \cdot u_{,j} )

As noted in the paper, this is a 3×3 tensor, meaning that it is defined at all points of the object and describes the deformation at that point. To this end, the individal entries include the information about the amount of information mapped on all pairs of axes, which is achieved taking the dot product of the directional derivatives.

Implementation Issue

As you might have guessed from the screenshot yesterday, I’m developing on Windows. The downside is that the Cholesky solver referenced in the paper, CHOLMOD, doesn’t have Visual Studio makefiles or precompiled binaries. I tried linking to the cygwin versions of CHOLMOD and it’s dependencies, but that lead to C functions being multiply defined. So I have the possibility of switching to Linux for development or compiling by hand. I’m looking at all the dependencies of CHOLMOD and still haven’t decided if it can easily be done (for example, the LAPACK library is written in Fortran which is not really easy to compile, but for that library I found some precompiled binaries). If I get the thing to compile in the next days I’ll stay on Windows, otherwise I might switch.