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]]