Source code for debyetools.poisson

import numpy as np
from typing import Tuple


[docs]def poisson_ratio(EM: np.ndarray, quiet: bool = False) -> float|Tuple[float,float,float,float,float,float,float,float]: """ Calculation of the Poisson's ratio from elastic moduli matrix. :param EM: Elastic moduli matrix. :type EM: np.ndarray :param quiet: (optional) If verbose. :type quiet: bool :return: Poisson's ratio. :rtype: float """ if quiet: return quiet_pa(EM) C11, C12, C13 = EM[0,0], EM[0,1], EM[0,2] C22, C23 = EM[1,1], EM[1,2] C33 = EM[2,2] C44 = EM[3,3] C55 = EM[4,4] C66 = EM[5,5] if EM[0,4]**2>0: C15 = EM[0,4] C25 = EM[1,4] C35 = EM[2,4] C46 = EM[3,5] else: C15 = EM[0,5] C25 = EM[1,5] C35 = EM[2,5] C46 = EM[3,4] f = C11*(C22*C55-C25**2)-C12*(C12*C55-C15*C25)+C15*(C12*C25-C15*C22)+C25*(C23*C35-C25*C33) g = C11*C22*C33-C11*C23**2-C22*C13**2-C33*C12**2+2*C12*C13*C23 Omega=2*(C15*C25*(C33*C12-C13*C23)+C15*C35*(C22*C13-C12*C23)+C25*C35*(C11*C23-C12*C13)) -(C15**2*(C22*C33-C23**2)+C25**2*(C11*C33-C13**2)+C35**2*(C11*C22-C12**2))+g*C55 GV = 1/15*(C11+C22+C33+3*(C44+C55+C66)-(C12+C13+C23)) GR = 15*(4*((C33*C55-C35**2)*(C11+C22+C12) + (C23*C55-C25*C35)*(C11-C12-C23) + (C13*C35-C15*C33)*(C15+C25) + (C13*C55-C15*C35)*(C22-C12-C23-C13) + (C13*C25-C15*C23)*(C15-C25) + f)/Omega+3*(g/Omega+(C44+C66)/(C44*C66-C46**2)))**(-1) BV = (C11+C22+C33+2*(C12+C13+C23))/9 BR = Omega*((C33*C55-C35**2)*(C11+C22-2*C12)+(C23*C55-C25*C35)*(2*C12-2*C11-C23) + (C13*C35-C15*C33)*(C15-2*C25)+(C13*C55-C15*C35)*(2*C12+2*C23-C13-2*C22)+2*(C13*C25-C15*C23)*(C25-C15)+f)**(-1) B = (BR+BV)/2 S = (GR+GV)/2 Y = (9.*B*S)/(3.*B+S) nu = (3.*B-Y)/(6.*B) return nu
[docs]def quiet_pa(EM: np.ndarray) -> Tuple[float,float,float,float,float,float,float,float]: """ Calculation of the Poisson's ratio from elastic moduli matrix. :param EM: Elastic moduli matrix. :type EM: np.ndarray :return: BR, BV, B, GR, GV, S, AU, nu :rtype: Tuple[float,float,float,float,float,float,float,float] """ C11, C12, C13 = EM[0,0]*1e-1, EM[0,1]*1e-1, EM[0,2]*1e-1 C22, C23 = EM[1,1]*1e-1, EM[1,2]*1e-1 C33 = EM[2,2]*1e-1 C44 = EM[3,3]*1e-1 C55 = EM[4,4]*1e-1 C66 = EM[5,5]*1e-1 if EM[0,4]*1e-1>0: C15 = EM[0,4]*1e-1 C25 = EM[1,4]*1e-1 C35 = EM[2,4]*1e-1 C46 = EM[3,5]*1e-1 else: C15 = EM[0,5]*1e-1 C25 = EM[1,5]*1e-1 C35 = EM[2,5]*1e-1 C46 = EM[3,4]*1e-1 f = C11*(C22*C55-C25**2)-C12*(C12*C55-C15*C25)+C15*(C12*C25-C15*C22)+C25*(C23*C35-C25*C33) g = C11*C22*C33-C11*C23**2-C22*C13**2-C33*C12**2+2*C12*C13*C23 Omega=2*(C15*C25*(C33*C12-C13*C23)+C15*C35*(C22*C13-C12*C23)+C25*C35*(C11*C23-C12*C13)) -(C15**2*(C22*C33-C23**2)+C25**2*(C11*C33-C13**2)+C35**2*(C11*C22-C12**2))+g*C55 GV = 1/15*(C11+C22+C33+3*(C44+C55+C66)-(C12+C13+C23)) GR = 15*(4*((C33*C55-C35**2)*(C11+C22+C12) + (C23*C55-C25*C35)*(C11-C12-C23) + (C13*C35-C15*C33)*(C15+C25) + (C13*C55-C15*C35)*(C22-C12-C23-C13) + (C13*C25-C15*C23)*(C15-C25) + f)/Omega+3*(g/Omega+(C44+C66)/(C44*C66-C46**2)))**(-1) BV = (C11+C22+C33+2*(C12+C13+C23))/9 BR = Omega*((C33*C55-C35**2)*(C11+C22-2*C12)+(C23*C55-C25*C35)*(2*C12-2*C11-C23) + (C13*C35-C15*C33)*(C15-2*C25)+(C13*C55-C15*C35)*(2*C12+2*C23-C13-2*C22)+2*(C13*C25-C15*C23)*(C25-C15)+f)**(-1) Br=BR Bv=BV Sr=GR Sv=GV B = (BR+BV)/2 S = (GR+GV)/2 Y = (9.*B*S)/(3.*B+S) nu = (3.*B-Y)/(6.*B) AU = 5*Sv/Sr+Bv/Br-6 return BR, BV, B, GR, GV, S, AU, nu