Source code for modelos.funcs
import numpy as np
from .tensortypes import Vetor1x6, Vetor6x1, Vetor6, Matriz3x3
[docs]
def vetor(vec_or_tensor: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> Vetor6:
"""Retorna um vetor de 6 elementos de ordem 1. Aceita varias entradas"""
if vec_or_tensor.shape in [(6, 1), (1, 6), (6,)]:
return vec_or_tensor.reshape((6,))
if vec_or_tensor.shape == (3, 3):
return np.concat(
[vec_or_tensor.diagonal(0), vec_or_tensor.diagonal(1), vec_or_tensor.diagonal(3)]
).reshape((6,))
raise ValueError("Vetor/Tensor errado")
[docs]
def tensor(vec_or_tensor: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> Matriz3x3:
"""Retorna um tensor simetrico 3x3. Aceita varias entradas"""
if vec_or_tensor.shape in [(6, 1), (1, 6), (6,)]:
vec_or_tensor = vec_or_tensor.reshape((6,))
return np.array(
[
[vec_or_tensor[0], vec_or_tensor[3], vec_or_tensor[5]],
[vec_or_tensor[3], vec_or_tensor[1], vec_or_tensor[4]],
[vec_or_tensor[5], vec_or_tensor[4], vec_or_tensor[2]],
]
)
if vec_or_tensor.shape == (3, 3):
return vec_or_tensor
raise ValueError("Vetor/Tensor errado")
[docs]
def vetor_para_linha(vec: Vetor6x1) -> list[float]:
"""Retorna uma lista de numeros, usando um vetor"""
return [float(s) for s in vetor(vec)]
[docs]
def vc(vec: list[float | int]) -> Vetor6x1:
"""Retorna um vetor coluna, usando uma lista de numeros"""
return np.array([[float(v) for v in vec]]).T
[docs]
def trace(vec_or_tensor: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> float:
"""Retorna o 'traco' de um vetor 6x6 (3 primeiros elementos) ou soma da diagonal da matriz 3x3"""
return float(vetor(vec_or_tensor)[0:3].sum())
[docs]
def octa(sigma: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> float:
"""Retora a tensao octaedrica, igual a media: `(Sx + Sy + Sz) / 3`"""
return trace(sigma) / 3
[docs]
def epsV(epsilon: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> float:
"""Retorna a deformacao volumetrica, igual a soma: `epsX + epsY + epsZ`"""
return trace(epsilon)
[docs]
def desv(sigma: Vetor6 | Vetor1x6 | Vetor6x1 | Matriz3x3) -> float:
"""Retorna a tensao desviadora, dada pela formula abaixo:
.. figure:: images/desv.png
"""
sx, sy, sz, txy, tyz, tzx = vetor(sigma)
return float(
np.sqrt(0.5 * ((sx - sy) ** 2 + (sy - sz) ** 2 + (sz - sx) ** 2 + 6 * (txy**2 + tyz**2 + tzx**2)))
)