forked from YuweiMao-NU/CP-AI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconstitutive_model_PL.py
81 lines (53 loc) · 2.22 KB
/
constitutive_model_PL.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Crystal Plasticity Code.
import math,sys
####################### Flow rule #########################
class update_statev:
def __init__(self,tau_alpha,res_ssd,dgam,dgam_dta,prop):
self.tau_alpha = tau_alpha
self.res_ssd = res_ssd
self.dgam = dgam
self.dgam_dta = dgam_dta
self.prop = prop
def RES(self):
const_w1 = self.prop[4] ; const_w2 = self.prop[5]
const_ss = self.prop[6]
const_a = self.prop[7]
const_h0 = self.prop[8] ; const_m = self.prop[9]
g0dot = self.prop[10]
dt = self.prop[11]
n_slip = len(self.tau_alpha)
res = [0.0 for i in range(n_slip)]
res_t = [0.0 for i in range(n_slip)]
dgamma = [0.0 for i in range(n_slip)]
dgam_dtau = [0.0 for i in range(n_slip)]
# for i in range(n_slip):
res0 = self.res_ssd
dgamma = self.dgam
dgam_dtau = self.dgam_dta
for k in range(n_slip):
res[k] = 0.0
for i in range(n_slip):
if i == k:
const_qab = const_w1
elif i != k:
const_qab = const_w2
ratio_res=1.0-(res0[i]/const_ss)
res[k] += const_qab*const_h0*abs(dgamma[i])*((ratio_res)**const_a)
for k in range(n_slip):
res[k] += res0[k]
for k in range(n_slip):
if res[k] >= 1.0:
ratio_alpha = self.tau_alpha[k]/res[k]
if self.tau_alpha[k] >= 0.0:
const_sign = 1.0
elif self.tau_alpha[k] < 0.0:
const_sign = -1.0
m_inv = 1.0/const_m
dgamma[k] = dt*const_sign*g0dot*((abs(ratio_alpha))**m_inv)
###### Calculation of dgamma_dtau (The sgn(Tau_alpha) is multiplied with another sgn(Tau_alpha) from the derivative)
res_inv = 1.0/res[k]
dgam_dtau[k] = dt*res_inv*g0dot*m_inv*((abs(ratio_alpha))**(m_inv-1.0))
elif res[k] < 1.0:
dgamma[k] = 0.0
dgam_dtau[k] = 0.0
return dgamma,dgam_dtau,res