# kelvinMap

Below is a demonstration of the features of the kelvinMap function

## Contents

```clear; close all; clc;
```

## Syntax

cKelvin=kelvinMap(c);

## Description

This function creates the Kelvin mapped (6x6) tensor form of the 4-th order (3x3x3x3) input tensor.

## Example 1: The Kelvin mapping of the elasticity tensor for Hooke's law with Lame parameters

```%Constructing 4th order base tensor set
I=eye(3,3); %The 2nd order identity tensor
II1=dyadicProduct(I,I,1); %4th order base tensor 1
II3=dyadicProduct(I,I,3); %4th order base tensor 3

%Lame parameters for Hooke's law
mu=2; %The shear modulus
lambda=3; %The lambda lame parameter

%Construct 4th order stiffness tensor
C=lambda.*II1+2.*mu.*II3;
```

Derive Kelvin mapped tensor

```Ck=kelvinMap(C)
```
```Ck =

7.0000    3.0000    3.0000         0         0         0
3.0000    7.0000    3.0000         0         0         0
3.0000    3.0000    7.0000         0         0         0
0         0         0    4.0000         0         0
0         0         0         0    4.0000         0
0         0         0         0         0    4.0000

```

The Kelvin mapping for eigenstiffness determination

```[V,D]=eig(Ck)
```
```V =

0.4082    0.7071         0         0         0    0.5774
0.4082   -0.7071         0         0         0    0.5774
-0.8165         0         0         0         0    0.5774
0         0    1.0000         0         0         0
0         0         0    1.0000         0         0
0         0         0         0    1.0000         0

D =

4.0000         0         0         0         0         0
0    4.0000         0         0         0         0
0         0    4.0000         0         0         0
0         0         0    4.0000         0         0
0         0         0         0    4.0000         0
0         0         0         0         0   13.0000

```

Using symbolic variables

```try
```
```    %Lame parameters for Hooke's law
syms mu lambda; %Create symbolic parameters

%Construct 4th order stiffness tensor
C=lambda.*II1+2.*mu.*II3;
```

Derive Kelvin mapped tensor

```    Ck=kelvinMap(C)
```
```
Ck =

[lambda + 2*mu,        lambda,        lambda,    0,    0,    0]
[       lambda, lambda + 2*mu,        lambda,    0,    0,    0]
[       lambda,        lambda, lambda + 2*mu,    0,    0,    0]
[            0,             0,             0, 2*mu,    0,    0]
[            0,             0,             0,    0, 2*mu,    0]
[            0,             0,             0,    0,    0, 2*mu]

```

The Kelvin mapping for eigenstiffness determination

```    [V,D]=eig(Ck)
```
```
V =

[-1, -1, 0, 0, 0, 1]
[ 1,  0, 0, 0, 0, 1]
[ 0,  1, 0, 0, 0, 1]
[ 0,  0, 1, 0, 0, 0]
[ 0,  0, 0, 1, 0, 0]
[ 0,  0, 0, 0, 1, 0]

D =

[2*mu,    0,    0,    0,    0,               0]
[   0, 2*mu,    0,    0,    0,               0]
[   0,    0, 2*mu,    0,    0,               0]
[   0,    0,    0, 2*mu,    0,               0]
[   0,    0,    0,    0, 2*mu,               0]
[   0,    0,    0,    0,    0, 3*lambda + 2*mu]

```
```end
```

## Example 2: The Kelvin mapping of the elasticity tensor for Hooke's law with bulk/shear modulus

```% Using mu and bulk modulus parameters
mu=2; %The shear modulus
lambda=3; %The lambda lame parameter
k=lambda+2/3*mu; %Bulk modulus

%Construct 4th order stiffness tensor
C=(k-2/3*mu).*II1+2.*mu.*II3; %Construct 4th order stiffness tensor
```

Derive Kelvin mapped tensor

```Ck=kelvinMap(C)
```
```Ck =

7.0000    3.0000    3.0000         0         0         0
3.0000    7.0000    3.0000         0         0         0
3.0000    3.0000    7.0000         0         0         0
0         0         0    4.0000         0         0
0         0         0         0    4.0000         0
0         0         0         0         0    4.0000

```

The Kelvin mapping for eigenstiffness determination

```[V,D]=eig(Ck)
```
```V =

0.4082    0.7071         0         0         0    0.5774
0.4082   -0.7071         0         0         0    0.5774
-0.8165         0         0         0         0    0.5774
0         0    1.0000         0         0         0
0         0         0    1.0000         0         0
0         0         0         0    1.0000         0

D =

4.0000         0         0         0         0         0
0    4.0000         0         0         0         0
0         0    4.0000         0         0         0
0         0         0    4.0000         0         0
0         0         0         0    4.0000         0
0         0         0         0         0   13.0000

```

Using symbolic variables

```try
```
```    syms mu k; %Create symbolic parameters

%Construct 4th order stiffness tensor
C=(k-2/3*mu).*II1+2.*mu.*II3; %Construct 4th order stiffness tensor
```

Derive Kelvin mapped tensor

```    Ck=kelvinMap(C)
```
```
Ck =

[k + (4*mu)/3, k - (2*mu)/3, k - (2*mu)/3,    0,    0,    0]
[k - (2*mu)/3, k + (4*mu)/3, k - (2*mu)/3,    0,    0,    0]
[k - (2*mu)/3, k - (2*mu)/3, k + (4*mu)/3,    0,    0,    0]
[           0,            0,            0, 2*mu,    0,    0]
[           0,            0,            0,    0, 2*mu,    0]
[           0,            0,            0,    0,    0, 2*mu]

```

The Kelvin mapping for eigenstiffness determination

```    [V,D]=eig(Ck)
```
```
V =

[1, -1, -1, 0, 0, 0]
[1,  1,  0, 0, 0, 0]
[1,  0,  1, 0, 0, 0]
[0,  0,  0, 1, 0, 0]
[0,  0,  0, 0, 1, 0]
[0,  0,  0, 0, 0, 1]

D =

[3*k,    0,    0,    0,    0,    0]
[  0, 2*mu,    0,    0,    0,    0]
[  0,    0, 2*mu,    0,    0,    0]
[  0,    0,    0, 2*mu,    0,    0]
[  0,    0,    0,    0, 2*mu,    0]
[  0,    0,    0,    0,    0, 2*mu]

```
```end
```

GIBBON www.gibboncode.org

Kevin Mattheus Moerman, gibbon.toolbox@gmail.com

GIBBON footer text

GIBBON: The Geometry and Image-based Bioengineering add-On. A toolbox for image segmentation, image-based modeling, meshing, and finite element analysis.

Copyright (C) 2006-2020 Kevin Mattheus Moerman

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.