Tensorial Analysis and Continuum Mechanics

Jean-François Gouyet
LPMC, Ecole Polytechnique
Palaiseau, France, 2003


This first chapter is intended for recalling some general features of Tensors and Vectors, in the spirit of the present notebook on Continuum Mechanics, and of the notebook for tensor calculus "Tensorial".

Initial rules and definitions (Automatically Initialized)

Needs["TensorCalculus4`Tensorial`"]

Needs["TContinuumMechanics2`TContinuumMechanics`"]

numequ = 1 ;

The flavors allow to distinguish between various basis.
The change of  flavor is given by ToFlavor[new, old]. ToFlavor[bar]  is equivalent to  ToFlavor[bar, Identity].

oldflavors = IndexFlavors ;

ClearIndexFlavor/@oldflavors ;

DeclareIndexFlavor[{black, Black}, {red, Red}, {green, ForestGreen}, {star, SuperStar}, {blue, Blue}, {hat, OverHat}, {tilde, OverTilde}, {bar, OverBar}]

DeclareBaseIndices[{1, 2, 3}] ;

1.   Vector and Tensors

Dot Product, Vector Components

DefineTensorShortcuts[{{, u, v, w, x}, 1}, {{g, δ, β}, 2}] ;

Canonical basis

The commonly used basis is the orthonormal basis. In the following, we will generally use black indices with base indices {1,2,3} defined in the initial rules. The dimension of the considered space is NDim

{NDim, BaseIndices}

{3, {1, 2, 3}}

The geometry of the vector space is completely defined for a set of  basis vectors (e) and the corresponding metric tensor (g), we define the values of the metric tensor. The basis vectors of the orthonormal basis are

d[i]

_i^i

The metric tensor, whose components are the scalar product of the basis vectors :

d[i] . d[j]//EvaluateDotProducts[, g]

g_ (ij)^(ij)

and for an orthonormal basis :

SetTensorValues[gdd[i, j], IdentityMatrix[3]]

(d[i] . d[j] == (d[i] . d[j]//EvaluateDotProducts[, g]))//ArrayExpansion[i, j]

_i^i . _j^j == g_ (ij)^(ij)

If we consider now a new basis, characterized by a red flavor :

d[red @ i]

_i^i

again, the characteristics of this red basis is completely determined by its metric tensor g_ (i  j)^(i  j)

d[i] . d[j]//ToFlavor[red]//EvaluateDotProducts[, g]

g_ (ij)^(ij)

There are many ways to build g_ (i  j)^(i  j). Here we start from the components of _ i^i in the canonical _i^i (black) basis

RedBasisVectors = ({{1, 1, 0}, {0, 1, 2}, {1, 0, 1}}) ;

SetTensorValueRules[d[red @ i], RedBasisVectors]

which corresponds equivalently to the rules (see below "Basis Change" )

MixedBasisInnerProductsRule = MapThread[Rule, {Table[u[j] . d[red @ i], {i, 1, 3}, {j, 1, 3}] ,   RedBasisVectors }, 2]//Flatten

The corresponding values (RedMetric) for the metric tensor are obtained either directly from the components of the red basis,

There is an easy way to calculate the red reciprocal basis vectors. Just take the rows of  Transpose[Inverse[RedBasisVectors]]:

(RedMetric = (gdd[red @ i, red @ j]//ArrayExpansion[red @ i, red @ j])/.%)//MatrixForm

SetTensorValueRules[guu[red @ i, red @ j], Inverse[RedMetric]]

SetTensorValueRules[u[red @ i], Transpose[Inverse[RedBasisVectors]]]

( {{2, 1, 1}, {1, 5, 2}, {1, 2, 2}} )

TensorValueRules[, g]

The red basis will be used as numerical example in the following developments.

 = uu[red @ i] d[red @ i]//EinsteinSum[]

 = vu[red @ i] d[red @ i]//EinsteinSum[]

 = wd[red @ i] u[red @ i]//EinsteinSum[]

u_1^1 _1^1 + u_2^2 _2^2 + u_3^3 _3^3

v_1^1 _1^1 + v_2^2 _2^2 + v_3^3 _3^3

w_1^1 _1^1 + w_2^2 _2^2 + w_3^3 _3^3

 . 

(u_1^1 _1^1 + u_2^2 _2^2 + u_3^3 _3^3) . (w_1^1 _1^1 + w_2^2 _2^2 + w_3^3 _3^3)

The scalar products can of course be calculated following various ways.

We can expand the above using LinearBreakout.

%//LinearBreakout[Dot][d[_], u[_]]

%/.TensorValueRules[]

u_1^1 w_1^1 + u_2^2 w_2^2 + u_3^3 w_3^3

EvaluateDotProducts evaluates the dot product without references to the tensor values of e.

 . //EvaluateDotProducts[ , g]

u_1^1 w_1^1 + u_2^2 w_2^2 + u_3^3 w_3^3

 . 

%//EvaluateDotProducts[ , g]

%/.TensorValueRules[, g]

(u_1^1 _1^1 + u_2^2 _2^2 + u_3^3 _3^3) . (v_1^1 _1^1 + v_2^2 _2^2 + v_3^3 _3^3)

 . 

%/.TensorValueRules[, g]

(u_1^1 _1^1 + u_2^2 _2^2 + u_3^3 _3^3) . (u_1^1 _1^1 + u_2^2 _2^2 + u_3^3 _3^3)

(u_1^1 + u_2^2)^2 + (u_1^1 + u_3^3)^2 + (2 u_2^2 + u_3^3)^2

 . 

%/.TensorValueRules[, g]

%//Simplify

(v_1^1 _1^1 + v_2^2 _2^2 + v_3^3 _3^3) . (w_1^1 _1^1 + w_2^2 _2^2 + w_3^3 _3^3)

(v_1^1 + v_2^2) ((2 w_1^1)/3 + w_2^2/3 - (2 w_3^3)/3) + (2 v_2^2 + v_3^3) (-w_1^1/3 + w_2^2/3 + w_3^3/3) + (v_1^1 + v_3^3) (w_1^1/3 - w_2^2/3 + (2 w_3^3)/3)

v_1^1 w_1^1 + v_2^2 w_2^2 + v_3^3 w_3^3

Basis change

Change from black basis to red basis will be defined by a basis change denoted (for instance) β_ (ij)^(ij) or β_ (ji)^(ji). Due to the symmetry between red and black, it is conventional in Tensorial to use the notation β_ (ij)^(ij).

TensorSymmetry[β, 2] = Symmetric[1, 2] ;

The operation KroneckerAbsorb[β] is appropriate here to show the basis change

d[red @ i] . u[j]//EvaluateDotProducts[ , β]

d[red @ i] == (d[j] %) == (d[j] %//SymmetrizeSlots[])

%//KroneckerAbsorb[β]

β_ (ij)^(ij)

_i^i == _j^j β_ (ij)^(ij) == _j^j β_ (ji)^(ji)

True

The coordinate transformation β_ (j i)^(j i) from black to red basis are now completely defined : it is the matrix of the components of _i^i in the black basis,

basischange = (d[red @ i]//ArrayExpansion[red @ i])/.TensorValueRules[, g]

{{1, 1, 0}, {0, 1, 2}, {1, 0, 1}}

SetTensorValueRules[βud[j, red @ i], basischange]

TensorValueRules[β]

The above basis change is precisely the one considered above in the rule called MixedBasisInnerProductsRule.

It can be shown easily that β_ (ij)^(ij) is also given by   x^i/∂ x^jwhich is of course not a delta function.
The present formulation leads to

PartialD[xu[i_], j_] ->βud[i, j] ;

d[red @ i] == PartialD[xu[j], red @ i] d[j]

%/.%%

(%//KroneckerAbsorb[β])

_i^i == x_j^j_ (, i) _j^j

_i^i == _j^j β_ (ji)^(ji)

True

Finally notice the possibilities of successive basis changes

β_ (jk)^(jk) β_ (ij)^(ij) == β_ (ik)^(ik)

ClearTensorShortcuts[{{, u, v, w, x}, 1}, {{g, δ, β}, 2}] ;


Created by Mathematica  (November 27, 2007) Valid XHTML 1.1!