Notation: Converter Symbolic

[1]:
import mechkit
import numpy as np
import sympy as sp
import itertools
[2]:
np.set_printoptions(
    linewidth=140,
    precision=3,
    # suppress=False,
)

Symbolic with numbers

[3]:
converter = mechkit.notation.ConverterSymbolic()
ones_tensor = np.ones((3, 3, 3, 3), dtype=sp.Symbol)
print(ones_tensor)
[[[[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]]


 [[[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]]


 [[[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]

  [[1 1 1]
   [1 1 1]
   [1 1 1]]]]
[4]:
ones_mandel6 = converter.to_mandel6(ones_tensor)
print(ones_mandel6)
[[1 1 1 sqrt(2) sqrt(2) sqrt(2)]
 [1 1 1 sqrt(2) sqrt(2) sqrt(2)]
 [1 1 1 sqrt(2) sqrt(2) sqrt(2)]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2]]
[5]:
ones_mandel9 = converter.to_mandel9(ones_tensor)
print(ones_mandel9)
[[1 1 1 sqrt(2) sqrt(2) sqrt(2) 0 0 0]
 [1 1 1 sqrt(2) sqrt(2) sqrt(2) 0 0 0]
 [1 1 1 sqrt(2) sqrt(2) sqrt(2) 0 0 0]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2 0 0 0]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2 0 0 0]
 [sqrt(2) sqrt(2) sqrt(2) 2 2 2 0 0 0]
 [0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]]

Symbolic with letters

[6]:
def tensor(
    order=2, symbol="A", dim=3, latex_index=False, kwargs_symbol={}, indice_offset=0
):
    A = np.zeros((dim,) * order, dtype=sp.Symbol)
    for x in itertools.product(range(dim), repeat=order):
        index = "".join(map(str, map(lambda x: x + indice_offset, x)))
        if latex_index:
            index = "_{" + index + "}"
        A[x] = sp.Symbol(symbol + index, **kwargs_symbol)
    return A
[7]:
def make_it_hooke_symmetric(A, dim=3):
    for i in range(dim):
        for j in range(dim):
            for k in range(dim):
                for m in range(dim):
                    A[i, j, m, k] = A[i, j, k, m]
                    A[j, i, m, k] = A[i, j, k, m]
                    A[k, m, i, j] = A[i, j, k, m]
    return A
[8]:
def make_it_left_symmetric(A, dim=3):
    for i in range(dim):
        for j in range(dim):
            for k in range(dim):
                for m in range(dim):
                    A[j, i, k, m] = A[i, j, k, m]
    return A
[9]:
def make_it_right_symmetric(A, dim=3):
    for i in range(dim):
        for j in range(dim):
            for k in range(dim):
                for m in range(dim):
                    A[i, j, m, k] = A[i, j, k, m]
    return A
[10]:
def make_it_minor_symmetric(A, dim=3):
    tmp = make_it_left_symmetric(A)
    tmp = make_it_right_symmetric(A)
    return tmp
[11]:
tensor = make_it_minor_symmetric(tensor(order=4, indice_offset=1))
print(tensor)
[[[[A1111 A1112 A1113]
   [A1112 A1122 A1123]
   [A1113 A1123 A1133]]

  [[A1211 A1212 A1213]
   [A1212 A1222 A1223]
   [A1213 A1223 A1233]]

  [[A1311 A1312 A1313]
   [A1312 A1322 A1323]
   [A1313 A1323 A1333]]]


 [[[A1211 A1212 A1213]
   [A1212 A1222 A1223]
   [A1213 A1223 A1233]]

  [[A2211 A2212 A2213]
   [A2212 A2222 A2223]
   [A2213 A2223 A2233]]

  [[A2311 A2312 A2313]
   [A2312 A2322 A2323]
   [A2313 A2323 A2333]]]


 [[[A1311 A1312 A1313]
   [A1312 A1322 A1323]
   [A1313 A1323 A1333]]

  [[A2311 A2312 A2313]
   [A2312 A2322 A2323]
   [A2313 A2323 A2333]]

  [[A3311 A3312 A3313]
   [A3312 A3322 A3323]
   [A3313 A3323 A3333]]]]
[12]:
tensor_mandel6 = converter.to_mandel6(tensor)
print(tensor_mandel6)
[[A1111 A1122 A1133 sqrt(2)*A1123 sqrt(2)*A1113 sqrt(2)*A1112]
 [A2211 A2222 A2233 sqrt(2)*A2223 sqrt(2)*A2213 sqrt(2)*A2212]
 [A3311 A3322 A3333 sqrt(2)*A3323 sqrt(2)*A3313 sqrt(2)*A3312]
 [sqrt(2)*A2311 sqrt(2)*A2322 sqrt(2)*A2333 2*A2323 2*A2313 2*A2312]
 [sqrt(2)*A1311 sqrt(2)*A1322 sqrt(2)*A1333 2*A1323 2*A1313 2*A1312]
 [sqrt(2)*A1211 sqrt(2)*A1222 sqrt(2)*A1233 2*A1223 2*A1213 2*A1212]]
[13]:
tensor_mandel9 = converter.to_mandel9(tensor)
print(tensor_mandel9)
[[A1111 A1122 A1133 sqrt(2)*A1123 sqrt(2)*A1113 sqrt(2)*A1112 0 0 0]
 [A2211 A2222 A2233 sqrt(2)*A2223 sqrt(2)*A2213 sqrt(2)*A2212 0 0 0]
 [A3311 A3322 A3333 sqrt(2)*A3323 sqrt(2)*A3313 sqrt(2)*A3312 0 0 0]
 [sqrt(2)*A2311 sqrt(2)*A2322 sqrt(2)*A2333 2*A2323 2*A2313 2*A2312 0 0 0]
 [sqrt(2)*A1311 sqrt(2)*A1322 sqrt(2)*A1333 2*A1323 2*A1313 2*A1312 0 0 0]
 [sqrt(2)*A1211 sqrt(2)*A1222 sqrt(2)*A1233 2*A1223 2*A1213 2*A1212 0 0 0]
 [0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]]