-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmaterial.py
44 lines (40 loc) · 1.53 KB
/
material.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import numpy as np
class Material:
def __init__(self, matProp):
self.matProp = matProp
E, nu = matProp['Emax'], matProp['nu'];
self.C = E/(1-nu**2)* \
np.array([[1, nu, 0],\
[nu, 1, 0],\
[0, 0, (1-nu)/2]]);
#--------------------------#
def computeSIMP_Interpolation(self, rho, penal):
E = 0.001*self.matProp['Emax'] + \
(0.999*self.matProp['Emax'])*\
(rho+0.01)**penal
return E
#--------------------------#
def computeRAMP_Interpolation(self, rho, penal):
E = 0.001*self.matProp['Emax'] +\
(0.999*self.matProp['Emax'])*\
(rho/(1.+penal*(1.-rho)))
return E
#--------------------------#
def getD0elemMatrix(self, mesh):
if(mesh.meshType == 'gridMesh'):
E = 1
nu = self.matProp['nu'];
k = np.array([1/2-nu/6, 1/8+nu/8, -1/4-nu/12, -1/8+3*nu/8,\
-1/4+nu/12, -1/8-nu/8, nu/6, 1/8-3*nu/8])
D0 = E/(1-nu**2)*np.array\
([ [k[0], k[1], k[2], k[3], k[4], k[5], k[6], k[7]],
[k[1], k[0], k[7], k[6], k[5], k[4], k[3], k[2]],
[k[2], k[7], k[0], k[5], k[6], k[3], k[4], k[1]],
[k[3], k[6], k[5], k[0], k[7], k[2], k[1], k[4]],
[k[4], k[5], k[6], k[7], k[0], k[1], k[2], k[3]],
[k[5], k[4], k[3], k[2], k[1], k[0], k[7], k[6]],
[k[6], k[3], k[4], k[1], k[2], k[7], k[0], k[5]],
[k[7], k[2], k[1], k[4], k[3], k[6], k[5], k[0]] ])
# all the elems have same base stiffness
return D0
#--------------------------#