Source code for modelos.plastic

from abc import ABC, abstractmethod
from .tensortypes import Vetor6x1
from .elastic import Elastic
from .hardening import Hardening
import numpy as np
from numpy import float64
from numpy.typing import NDArray


[docs] class Plastic(Elastic, Hardening, ABC): @property def phi(self) -> float: """Angulo de atrito no espaco dos circulos de Mohr (`sigma`-`tau`) .. figure:: images/phi_M.png """ return np.asin(3 * self.Mc / (6 + self.Mc)) @property def Mc(self) -> float: """Inclinacao da envoltoria de cisalhamento `Mc` no espaco `p`-`q` (Linha de Estado Crítico) .. figure:: images/Mc_phi.png """ return 6 * np.sin(self.phi) / (3 - np.sin(self.phi))
[docs] @abstractmethod def func_plastica(self, *args) -> float: """Calcula e retorna o valor da funcao de plastificacao (`f`) em termos do estado de tensao. .. figure:: images/f_abs.png """ raise NotImplementedError("Needs to implement")
[docs] @abstractmethod def grad_f(self) -> Vetor6x1: """Calcula e retorna o vetor gradiente da funcao de plastificacao (`f`) em relacao ao estado de tensao. .. figure:: images/gradf_abs.png """ raise NotImplementedError("Needs to implement")
[docs] @abstractmethod def q_plastic( self, p: float | NDArray[float64], s: float | NDArray[float64] ) -> float | NDArray[float64]: """Calcula a tensao desviadora de plastificacao em funcao da tensao octaedrica. .. figure:: images/q_abs.png """ raise NotImplementedError("Needs to implement")
[docs] def grad_g(self) -> Vetor6x1: """Calcula e retorna o vetor gradiente da funcao potencial plastico (`g`) em relacao ao estado de tensao. Por default, igual ao gradiente da funcao de plastificacao (`f`): `grad_g = grad_f` (fluxo associado). .. figure:: images/gradg_abs.png """ return self.grad_f()
[docs] def dfds(self) -> float: """Calcula e retorna a derivada da funcao de plastificacao (`f`) em relacao a variavel interna de endurecimento do tipo tensao (s) Por default, igual a zero: `df/ds = 0` (sem endurecimento). .. figure:: images/dfds_abs.png """ return 0.0
[docs] def multiplicador_plastico(self, deps: Vetor6x1) -> float: """Calcula e retorna o multiplicador plastico. .. figure:: images/chi_abs.png """ Df = self.grad_f() Dg = self.grad_g() De = self.matriz_elastica() return float( ( (Df.T @ De @ deps) / (Df.T @ De @ Dg - self.dfds() * self.dsdh() * self.grad_h().T @ Dg) )[0, 0] )