Operators: SymΒΆ
[1]:
import mechkit
import numpy as np
[2]:
np.set_printoptions(
linewidth=140,
precision=2,
suppress=True,
)
np.random.seed(1)
converter = mechkit.notation.Converter()
[3]:
def print_in_mandel9(tensor):
print(converter.to_mandel9(tensor))
[4]:
# ## Split random tensor of fourth order into completely symmetric and skew parts
tensor = np.random.rand(3, 3, 3, 3)
sym_operator = mechkit.operators.Sym(axes=None) # by default all axes are symmetrized
sym_part = sym_operator(tensor)
skew_part = tensor - sym_part
[5]:
print("tensor=")
print_in_mandel9(tensor)
tensor=
[[ 0.42 0.15 0.4 0.31 0.13 0.72 0.18 -0.13 -0.3 ]
[ 0.69 0.99 0.1 1.09 0.21 1.12 0.03 -0.19 -0.06]
[ 0.14 0.93 0.88 0.76 0.81 0.69 0.27 -0.25 -0.45]
[ 0.61 0.46 0.28 1.04 1.05 0.96 0.08 -0.22 -0. ]
[ 0.45 0.64 0.55 1.35 1.18 0.68 -0.04 0.2 0.43]
[ 0.41 0.92 0.62 1.05 1.38 0.45 0.06 0.18 -0.14]
[-0.02 0.27 -0.09 0.81 0.08 -0.24 -0.12 0.17 0.62]
[-0.25 -0.2 -0.43 0.24 0.5 0.48 0.24 -0.27 0.34]
[-0.35 -0.32 -0.17 0.6 0.03 -0.18 -0.33 0.17 0.07]]
[6]:
print("sym_part=")
print_in_mandel9(sym_part)
sym_part=
[[ 0.42 0.29 0.48 0.64 0.29 0.57 0. 0. 0. ]
[ 0.29 0.99 0.52 0.77 0.61 1.02 0. -0. -0. ]
[ 0.48 0.52 0.88 0.52 0.68 0.78 0. -0. 0. ]
[ 0.64 0.77 0.52 1.04 1.11 0.87 0. 0. -0. ]
[ 0.29 0.61 0.68 1.11 0.96 0.91 0. 0. -0. ]
[ 0.57 1.02 0.78 0.87 0.91 0.58 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. ]]
[7]:
print("skew_part=")
print_in_mandel9(skew_part)
skew_part=
[[ 0. -0.14 -0.08 -0.33 -0.16 0.16 0.18 -0.13 -0.3 ]
[ 0.4 -0. -0.42 0.32 -0.4 0.1 0.03 -0.19 -0.06]
[-0.34 0.41 -0. 0.24 0.13 -0.1 0.27 -0.25 -0.45]
[-0.03 -0.32 -0.24 0. -0.06 0.09 0.08 -0.22 -0. ]
[ 0.16 0.02 -0.13 0.24 0.21 -0.22 -0.04 0.2 0.43]
[-0.16 -0.1 -0.16 0.18 0.48 -0.13 0.06 0.18 -0.14]
[-0.02 0.27 -0.09 0.81 0.08 -0.24 -0.12 0.17 0.62]
[-0.25 -0.2 -0.43 0.24 0.5 0.48 0.24 -0.27 0.34]
[-0.35 -0.32 -0.17 0.6 0.03 -0.18 -0.33 0.17 0.07]]
[8]:
print("sym_part + skew_part")
print_in_mandel9(sym_part + skew_part)
assert np.allclose(tensor, sym_part + skew_part)
sym_part + skew_part
[[ 0.42 0.15 0.4 0.31 0.13 0.72 0.18 -0.13 -0.3 ]
[ 0.69 0.99 0.1 1.09 0.21 1.12 0.03 -0.19 -0.06]
[ 0.14 0.93 0.88 0.76 0.81 0.69 0.27 -0.25 -0.45]
[ 0.61 0.46 0.28 1.04 1.05 0.96 0.08 -0.22 -0. ]
[ 0.45 0.64 0.55 1.35 1.18 0.68 -0.04 0.2 0.43]
[ 0.41 0.92 0.62 1.05 1.38 0.45 0.06 0.18 -0.14]
[-0.02 0.27 -0.09 0.81 0.08 -0.24 -0.12 0.17 0.62]
[-0.25 -0.2 -0.43 0.24 0.5 0.48 0.24 -0.27 0.34]
[-0.35 -0.32 -0.17 0.6 0.03 -0.18 -0.33 0.17 0.07]]
[9]:
# ## Split into part which has inner symmetry and the remaining part
sym_inner_part = mechkit.operators.Sym_Fourth_Order_Special(label="inner")(tensor)
remaining = tensor - sym_inner_part
[10]:
print("tensor=")
print_in_mandel9(tensor)
tensor=
[[ 0.42 0.15 0.4 0.31 0.13 0.72 0.18 -0.13 -0.3 ]
[ 0.69 0.99 0.1 1.09 0.21 1.12 0.03 -0.19 -0.06]
[ 0.14 0.93 0.88 0.76 0.81 0.69 0.27 -0.25 -0.45]
[ 0.61 0.46 0.28 1.04 1.05 0.96 0.08 -0.22 -0. ]
[ 0.45 0.64 0.55 1.35 1.18 0.68 -0.04 0.2 0.43]
[ 0.41 0.92 0.62 1.05 1.38 0.45 0.06 0.18 -0.14]
[-0.02 0.27 -0.09 0.81 0.08 -0.24 -0.12 0.17 0.62]
[-0.25 -0.2 -0.43 0.24 0.5 0.48 0.24 -0.27 0.34]
[-0.35 -0.32 -0.17 0.6 0.03 -0.18 -0.33 0.17 0.07]]
[11]:
print("sym_inner_part=")
print_in_mandel9(sym_inner_part)
sym_inner_part=
[[ 0.42 0.42 0.27 0.46 0.29 0.57 0. 0. 0. ]
[ 0.42 0.99 0.52 0.77 0.42 1.02 0. -0. 0. ]
[ 0.27 0.52 0.88 0.52 0.68 0.65 0. 0. -0. ]
[ 0.46 0.77 0.52 1.04 1.2 1. -0. 0. 0. ]
[ 0.29 0.42 0.68 1.2 1.18 1.03 -0. 0. -0. ]
[ 0.57 1.02 0.65 1. 1.03 0.45 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. ]]
[12]:
print("remaining=")
print_in_mandel9(remaining)
remaining=
[[-0. -0.27 0.13 -0.15 -0.16 0.16 0.18 -0.13 -0.3 ]
[ 0.27 0. -0.41 0.32 -0.21 0.1 0.03 -0.19 -0.06]
[-0.13 0.41 -0. 0.24 0.13 0.03 0.27 -0.25 -0.45]
[ 0.15 -0.32 -0.24 0. -0.15 -0.05 0.08 -0.22 -0. ]
[ 0.16 0.21 -0.13 0.15 -0. -0.35 -0.04 0.2 0.43]
[-0.16 -0.1 -0.03 0.05 0.35 0. 0.06 0.18 -0.14]
[-0.02 0.27 -0.09 0.81 0.08 -0.24 -0.12 0.17 0.62]
[-0.25 -0.2 -0.43 0.24 0.5 0.48 0.24 -0.27 0.34]
[-0.35 -0.32 -0.17 0.6 0.03 -0.18 -0.33 0.17 0.07]]