Buckets:
| import numpy as np | |
| from math import * | |
| import versDV as dv | |
| # import old.versDV as dv | |
| # def deviateur(tens): | |
| # p = dv.hydro(tens) | |
| # res = [] | |
| # for i in range(3): | |
| # res.append(tens[i]-p) | |
| # for i in range(3,6): | |
| # res.append(tens[i]) | |
| # return np.array(res) | |
| def deviateur(tens): | |
| H=dv.hydro(tens) | |
| deviat=dv.tens_to_mat(tens)-np.eye(3)*H | |
| deviat=dv.mat_to_tens(deviat) | |
| deviat=np.delete(deviat, 2) # on enlève la troisième | |
| return deviat | |
| # def hydro(tens): | |
| # p = 0 | |
| # for i in range(3): | |
| # p = p + tens[i] | |
| # return p/3 | |
| # def genereTens(sigma1,omega,pasTemps,fin): | |
| # tens = np.array([sigma1,0,0,0,0,0]) | |
| # for i in range(int(fin/pasTemps)): | |
| # t = (i+1)*pasTemps | |
| # ligne = np.array([sigma1*cos(omega*t),0,0,0,0,0]) | |
| # tens = np.vstack((tens, ligne)) | |
| # # omega est la pulsation, vous pouvez choisir 2*pi par exemple | |
| # # sigma1 est fixe, par exemple 100 MPa | |
| # # cette fonction doit générer une matrice de 6 colonnes, chaque ligne étant le tenseur à un instant du cycle, et de la forme [sigma1*cos(omega*t),0,0,0,0,0] | |
| # return tens | |
| # def CalculMatDev(matTens): | |
| # resDev = matTens[:,[0,1,3,4,5]] | |
| # taille = resDev.shape | |
| # nLig = taille[0] | |
| # for i in range(nLig): | |
| # pH = hydro(matTens[i]) | |
| # for j in range(3): | |
| # resDev[i][j] = resDev[i][j]-pH | |
| # return resDev | |
| def CalculMatDev(matTens): | |
| return np.array([deviateur(matTens[i]) for i in range(matTens.shape[0])]) | |
| def normeTresca(tens): | |
| TensM=dv.tens_to_mat(tens) | |
| valP = np.linalg.eigvals(TensM) | |
| max = float(np.max(valP)) | |
| min = float(np.min(valP)) | |
| return abs(max-min) | |
| def normeJ2(tens): | |
| """retourne la norme J2 du tenseur déviateur""" | |
| TensM=dv.tens_to_mat(tens) | |
| J2=np.tensordot(TensM,TensM)/2 | |
| return sqrt(3*J2) | |
| # def diametre(matTens): | |
| # """calcul la distance maximale entre deux lignes (des déviateurs) au sens de la norme de Tresca) et retourne les deux points extrêmes, """ | |
| # matDev=CalculMatDev(matTens) | |
| # point1=np.zeros(5) | |
| # point2=np.zeros(5) | |
| # maxDist=0 | |
| # for i in range(matDev.shape[0]-1): | |
| # k=i | |
| # point1 = matDev[k] | |
| # for j in range(i+1,matDev.shape[0]): | |
| # point2 = matDev[j] | |
| # dist=normeTresca(matDev[i]-matDev[j]) | |
| # if dist>maxDist: | |
| # maxDist=dist | |
| # point1=matDev[k] | |
| # point2=matDev[j] | |
| # return maxDist, point1, point2 | |
| def diametre(matTens): | |
| """calcul la distance maximale entre deux lignes (des déviateurs) au sens de la norme de Tresca) et retourne les deux points extrêmes, """ | |
| M=np.zeros((matTens.shape[0],matTens.shape[0])) | |
| matDev=CalculMatDev(matTens) | |
| for i in range(matDev.shape[0]-1): | |
| for j in range(i+1,matDev.shape[0]): | |
| M[i][j]=normeJ2(matDev[i]-matDev[j]) | |
| M[j][i]=M[i][j] | |
| ind=np.unravel_index(np.argmax(M, axis=None), M.shape) | |
| return M[ind], matDev[ind[0]], matDev[ind[1]] | |
| def recentre(matTens): | |
| """retourne une matrice de tenseurs déviateurs recentrée par Centre qui est un tenseur.""" | |
| # taille = matDev.shape | |
| # nLig = taille[0] | |
| # for i in range(nLig): | |
| # ligne = matDev[i] - Centre | |
| # matCentre = np.vstack((matCentre, ligne)) | |
| points = diametre(matTens) | |
| Centre = (points[1] + points[2])/2 | |
| matDev=CalculMatDev(matTens) | |
| return [matDev - Centre, Centre] | |
| # class Deviateur: | |
| if __name__ == "__main__": | |
| matTens = dv.load_tens_from_csv('./datas/tensors_uniaxial.csv') | |
| res = CalculMatDev(matTens) | |
| # trace le nuage de points J2(matDev)(t),p(t)) |
Xet Storage Details
- Size:
- 3.7 kB
- Xet hash:
- 73e23b2372e5e164e0930c657cccc4d76134458a0a3e2fdd418e88c324782f35
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.