Add scripts and inp files.

This commit is contained in:
James Grogan 2024-05-13 20:50:21 +01:00
parent ad937f2602
commit e19f869a1e
390 changed files with 6580687 additions and 10 deletions

49
JMBBM13b/Activity.py Normal file
View file

@ -0,0 +1,49 @@
# Import Neccesary Abaqus Modules
from abaqusConstants import *
from odbAccess import *
import sys
import os
odbfilename='CDIE-1.odb'
odb=openOdb(path=odbfilename)
aInst=odb.rootAssembly.instances['PART-1-1']
bInst=odb.rootAssembly.instances['PART-3-1']
yold=[]
ynew=[]
outFile = open('out.dat',"w")
for i in range(0,18):
yold.append(0.)
ynew.append(0.)
for eachFrame in odb.steps["Step-1"].frames:
strain=abs(eachFrame.fieldOutputs["U"].getSubset(region=bInst).values[0].data[0])/6.
for i in range(0,18):
yold[i]=ynew[i]
for i in range(0,18):
label='SDV'+str(19+i)
ynew[i]=abs(eachFrame.fieldOutputs[label].getSubset(region=aInst).values[0].data)
sum=0.
for i in range(0,18):
sum=sum+ynew[i]-yold[i]
basalsum=0.
for i in range(0,3):
basalsum=basalsum+ynew[i]-yold[i]
prismsum=0.
for i in range(3,6):
prismsum=prismsum+ynew[i]-yold[i]
pyrsum=0.
for i in range(6,12):
pyrsum=pyrsum+ynew[i]-yold[i]
twinsum=0.
for i in range(12,18):
twinsum=twinsum+ynew[i]-yold[i]
if sum!=0.:
prismsum=prismsum/sum
basalsum=basalsum/sum
pyrsum=pyrsum/sum
twinsum=twinsum/sum
else:
twinsum=0.
pyrsum=0.
prismsum=0.
basalsum=0.
outFile.write("%12.6f %12.6f %12.6f %12.6f %12.6f\n " % (basalsum,prismsum,pyrsum,twinsum,strain))
outFile.close()

708
JMBBM13b/CDIE_1E.inp Normal file
View file

@ -0,0 +1,708 @@
*Heading
** Job name: CDIE_1E Model name: Model-4
** Generated by: Abaqus/CAE 6.10-1
*Preprint, echo=NO, model=NO, history=NO, contact=NO
**
** PARTS
**
*Part, name=Part-1
*Node
1, 10., 6., 13.
2, 10., 0., 13.
3, 10., 6., 0.
4, 10., 0., 0.
5, 0., 6., 13.
6, 0., 0., 13.
7, 0., 6., 0.
8, 0., 0., 0.
*Element, type=C3D8
1, 5, 6, 8, 7, 1, 2, 4, 3
*Nset, nset=_PickedSet4, internal, generate
1, 8, 1
*Elset, elset=_PickedSet4, internal
1,
*Elset, elset=_Surf-1_S1, internal
1,
*Elset, elset=_Surf-1_S6, internal
1,
*Elset, elset=_Surf-1_S2, internal
1,
*Elset, elset=_Surf-1_S4, internal
1,
*Elset, elset=_Surf-1_S3, internal
1,
*Elset, elset=_Surf-1_S5, internal
1,
*Surface, type=ELEMENT, name=Surf-1
_Surf-1_S1, S1
_Surf-1_S6, S6
_Surf-1_S2, S2
_Surf-1_S4, S4
_Surf-1_S3, S3
_Surf-1_S5, S5
** Section: Section-1
*Solid Section, elset=_PickedSet4, material=Material-1
,
*End Part
**
*Part, name=Part-2
*Node
1, 10.0100002, 8., 26.
2, 10.0100002, 0., 26.
3, 10.0100002, 0., 0.
4, 10.0100002, 8., 0.
5, 0., 0., 26.
6, 0., 0., 0.
7, 0., 8., 26.
8, 0., 8., 0.
9, 10.0100002, 6., 26.
10, 10.0100002, 4., 26.
11, 10.0100002, 2., 26.
12, 10.0100002, 0., 24.
13, 10.0100002, 0., 22.
14, 10.0100002, 0., 20.
15, 10.0100002, 0., 18.
16, 10.0100002, 0., 16.
17, 10.0100002, 0., 14.
18, 10.0100002, 0., 12.
19, 10.0100002, 0., 10.
20, 10.0100002, 0., 8.
21, 10.0100002, 0., 6.
22, 10.0100002, 0., 4.
23, 10.0100002, 0., 2.
24, 10.0100002, 2., 0.
25, 10.0100002, 4., 0.
26, 10.0100002, 6., 0.
27, 10.0100002, 8., 2.
28, 10.0100002, 8., 4.
29, 10.0100002, 8., 6.
30, 10.0100002, 8., 8.
31, 10.0100002, 8., 10.
32, 10.0100002, 8., 12.
33, 10.0100002, 8., 14.
34, 10.0100002, 8., 16.
35, 10.0100002, 8., 18.
36, 10.0100002, 8., 20.
37, 10.0100002, 8., 22.
38, 10.0100002, 8., 24.
39, 8.00800037, 0., 26.
40, 6.00600004, 0., 26.
41, 4.00400019, 0., 26.
42, 2.00200009, 0., 26.
43, 0., 0., 24.
44, 0., 0., 22.
45, 0., 0., 20.
46, 0., 0., 18.
47, 0., 0., 16.
48, 0., 0., 14.
49, 0., 0., 12.
50, 0., 0., 10.
51, 0., 0., 8.
52, 0., 0., 6.
53, 0., 0., 4.
54, 0., 0., 2.
55, 2.00200009, 0., 0.
56, 4.00400019, 0., 0.
57, 6.00600004, 0., 0.
58, 8.00800037, 0., 0.
59, 0., 2., 26.
60, 0., 4., 26.
61, 0., 6., 26.
62, 0., 8., 24.
63, 0., 8., 22.
64, 0., 8., 20.
65, 0., 8., 18.
66, 0., 8., 16.
67, 0., 8., 14.
68, 0., 8., 12.
69, 0., 8., 10.
70, 0., 8., 8.
71, 0., 8., 6.
72, 0., 8., 4.
73, 0., 8., 2.
74, 0., 6., 0.
75, 0., 4., 0.
76, 0., 2., 0.
77, 10.0100002, 6., 24.
78, 10.0100002, 4., 24.
79, 10.0100002, 2., 24.
80, 10.0100002, 6., 22.
81, 10.0100002, 4., 22.
82, 10.0100002, 2., 22.
83, 10.0100002, 6., 20.
84, 10.0100002, 4., 20.
85, 10.0100002, 2., 20.
86, 10.0100002, 6., 18.
87, 10.0100002, 4., 18.
88, 10.0100002, 2., 18.
89, 10.0100002, 6., 16.
90, 10.0100002, 4., 16.
91, 10.0100002, 2., 16.
92, 10.0100002, 6., 14.
93, 10.0100002, 4., 14.
94, 10.0100002, 2., 14.
95, 10.0100002, 6., 12.
96, 10.0100002, 4., 12.
97, 10.0100002, 2., 12.
98, 10.0100002, 6., 10.
99, 10.0100002, 4., 10.
100, 10.0100002, 2., 10.
101, 10.0100002, 6., 8.
102, 10.0100002, 4., 8.
103, 10.0100002, 2., 8.
104, 10.0100002, 6., 6.
105, 10.0100002, 4., 6.
106, 10.0100002, 2., 6.
107, 10.0100002, 6., 4.
108, 10.0100002, 4., 4.
109, 10.0100002, 2., 4.
110, 10.0100002, 6., 2.
111, 10.0100002, 4., 2.
112, 10.0100002, 2., 2.
113, 8.00800037, 0., 24.
114, 6.00600004, 0., 24.
115, 4.00400019, 0., 24.
116, 2.00200009, 0., 24.
117, 8.00800037, 0., 22.
118, 6.00600004, 0., 22.
119, 4.00400019, 0., 22.
120, 2.00200009, 0., 22.
121, 8.00800037, 0., 20.
122, 6.00600004, 0., 20.
123, 4.00400019, 0., 20.
124, 2.00200009, 0., 20.
125, 8.00800037, 0., 18.
126, 6.00600004, 0., 18.
127, 4.00400019, 0., 18.
128, 2.00200009, 0., 18.
129, 8.00800037, 0., 16.
130, 6.00600004, 0., 16.
131, 4.00400019, 0., 16.
132, 2.00200009, 0., 16.
133, 8.00800037, 0., 14.
134, 6.00600004, 0., 14.
135, 4.00400019, 0., 14.
136, 2.00200009, 0., 14.
137, 8.00800037, 0., 12.
138, 6.00600004, 0., 12.
139, 4.00400019, 0., 12.
140, 2.00200009, 0., 12.
141, 8.00800037, 0., 10.
142, 6.00600004, 0., 10.
143, 4.00400019, 0., 10.
144, 2.00200009, 0., 10.
145, 8.00800037, 0., 8.
146, 6.00600004, 0., 8.
147, 4.00400019, 0., 8.
148, 2.00200009, 0., 8.
149, 8.00800037, 0., 6.
150, 6.00600004, 0., 6.
151, 4.00400019, 0., 6.
152, 2.00200009, 0., 6.
153, 8.00800037, 0., 4.
154, 6.00600004, 0., 4.
155, 4.00400019, 0., 4.
156, 2.00200009, 0., 4.
157, 8.00800037, 0., 2.
158, 6.00600004, 0., 2.
159, 4.00400019, 0., 2.
160, 2.00200009, 0., 2.
161, 0., 2., 24.
162, 0., 4., 24.
163, 0., 6., 24.
164, 0., 2., 22.
165, 0., 4., 22.
166, 0., 6., 22.
167, 0., 2., 20.
168, 0., 4., 20.
169, 0., 6., 20.
170, 0., 2., 18.
171, 0., 4., 18.
172, 0., 6., 18.
173, 0., 2., 16.
174, 0., 4., 16.
175, 0., 6., 16.
176, 0., 2., 14.
177, 0., 4., 14.
178, 0., 6., 14.
179, 0., 2., 12.
180, 0., 4., 12.
181, 0., 6., 12.
182, 0., 2., 10.
183, 0., 4., 10.
184, 0., 6., 10.
185, 0., 2., 8.
186, 0., 4., 8.
187, 0., 6., 8.
188, 0., 2., 6.
189, 0., 4., 6.
190, 0., 6., 6.
191, 0., 2., 4.
192, 0., 4., 4.
193, 0., 6., 4.
194, 0., 2., 2.
195, 0., 4., 2.
196, 0., 6., 2.
*Element, type=S4R
1, 1, 9, 77, 38
2, 9, 10, 78, 77
3, 10, 11, 79, 78
4, 11, 2, 12, 79
5, 38, 77, 80, 37
6, 77, 78, 81, 80
7, 78, 79, 82, 81
8, 79, 12, 13, 82
9, 37, 80, 83, 36
10, 80, 81, 84, 83
11, 81, 82, 85, 84
12, 82, 13, 14, 85
13, 36, 83, 86, 35
14, 83, 84, 87, 86
15, 84, 85, 88, 87
16, 85, 14, 15, 88
17, 35, 86, 89, 34
18, 86, 87, 90, 89
19, 87, 88, 91, 90
20, 88, 15, 16, 91
21, 34, 89, 92, 33
22, 89, 90, 93, 92
23, 90, 91, 94, 93
24, 91, 16, 17, 94
25, 33, 92, 95, 32
26, 92, 93, 96, 95
27, 93, 94, 97, 96
28, 94, 17, 18, 97
29, 32, 95, 98, 31
30, 95, 96, 99, 98
31, 96, 97, 100, 99
32, 97, 18, 19, 100
33, 31, 98, 101, 30
34, 98, 99, 102, 101
35, 99, 100, 103, 102
36, 100, 19, 20, 103
37, 30, 101, 104, 29
38, 101, 102, 105, 104
39, 102, 103, 106, 105
40, 103, 20, 21, 106
41, 29, 104, 107, 28
42, 104, 105, 108, 107
43, 105, 106, 109, 108
44, 106, 21, 22, 109
45, 28, 107, 110, 27
46, 107, 108, 111, 110
47, 108, 109, 112, 111
48, 109, 22, 23, 112
49, 27, 110, 26, 4
50, 110, 111, 25, 26
51, 111, 112, 24, 25
52, 112, 23, 3, 24
53, 2, 39, 113, 12
54, 39, 40, 114, 113
55, 40, 41, 115, 114
56, 41, 42, 116, 115
57, 42, 5, 43, 116
58, 12, 113, 117, 13
59, 113, 114, 118, 117
60, 114, 115, 119, 118
61, 115, 116, 120, 119
62, 116, 43, 44, 120
63, 13, 117, 121, 14
64, 117, 118, 122, 121
65, 118, 119, 123, 122
66, 119, 120, 124, 123
67, 120, 44, 45, 124
68, 14, 121, 125, 15
69, 121, 122, 126, 125
70, 122, 123, 127, 126
71, 123, 124, 128, 127
72, 124, 45, 46, 128
73, 15, 125, 129, 16
74, 125, 126, 130, 129
75, 126, 127, 131, 130
76, 127, 128, 132, 131
77, 128, 46, 47, 132
78, 16, 129, 133, 17
79, 129, 130, 134, 133
80, 130, 131, 135, 134
81, 131, 132, 136, 135
82, 132, 47, 48, 136
83, 17, 133, 137, 18
84, 133, 134, 138, 137
85, 134, 135, 139, 138
86, 135, 136, 140, 139
87, 136, 48, 49, 140
88, 18, 137, 141, 19
89, 137, 138, 142, 141
90, 138, 139, 143, 142
91, 139, 140, 144, 143
92, 140, 49, 50, 144
93, 19, 141, 145, 20
94, 141, 142, 146, 145
95, 142, 143, 147, 146
96, 143, 144, 148, 147
97, 144, 50, 51, 148
98, 20, 145, 149, 21
99, 145, 146, 150, 149
100, 146, 147, 151, 150
101, 147, 148, 152, 151
102, 148, 51, 52, 152
103, 21, 149, 153, 22
104, 149, 150, 154, 153
105, 150, 151, 155, 154
106, 151, 152, 156, 155
107, 152, 52, 53, 156
108, 22, 153, 157, 23
109, 153, 154, 158, 157
110, 154, 155, 159, 158
111, 155, 156, 160, 159
112, 156, 53, 54, 160
113, 23, 157, 58, 3
114, 157, 158, 57, 58
115, 158, 159, 56, 57
116, 159, 160, 55, 56
117, 160, 54, 6, 55
118, 5, 59, 161, 43
119, 59, 60, 162, 161
120, 60, 61, 163, 162
121, 61, 7, 62, 163
122, 43, 161, 164, 44
123, 161, 162, 165, 164
124, 162, 163, 166, 165
125, 163, 62, 63, 166
126, 44, 164, 167, 45
127, 164, 165, 168, 167
128, 165, 166, 169, 168
129, 166, 63, 64, 169
130, 45, 167, 170, 46
131, 167, 168, 171, 170
132, 168, 169, 172, 171
133, 169, 64, 65, 172
134, 46, 170, 173, 47
135, 170, 171, 174, 173
136, 171, 172, 175, 174
137, 172, 65, 66, 175
138, 47, 173, 176, 48
139, 173, 174, 177, 176
140, 174, 175, 178, 177
141, 175, 66, 67, 178
142, 48, 176, 179, 49
143, 176, 177, 180, 179
144, 177, 178, 181, 180
145, 178, 67, 68, 181
146, 49, 179, 182, 50
147, 179, 180, 183, 182
148, 180, 181, 184, 183
149, 181, 68, 69, 184
150, 50, 182, 185, 51
151, 182, 183, 186, 185
152, 183, 184, 187, 186
153, 184, 69, 70, 187
154, 51, 185, 188, 52
155, 185, 186, 189, 188
156, 186, 187, 190, 189
157, 187, 70, 71, 190
158, 52, 188, 191, 53
159, 188, 189, 192, 191
160, 189, 190, 193, 192
161, 190, 71, 72, 193
162, 53, 191, 194, 54
163, 191, 192, 195, 194
164, 192, 193, 196, 195
165, 193, 72, 73, 196
166, 54, 194, 76, 6
167, 194, 195, 75, 76
168, 195, 196, 74, 75
169, 196, 73, 8, 74
*Nset, nset=_PickedSet4, internal, generate
1, 196, 1
*Elset, elset=_PickedSet4, internal, generate
1, 169, 1
** Section: Section-2
*Shell Section, elset=_PickedSet4, material=Material-2
0.01, 5
*End Part
**
*Part, name=Part-3
*Node
1, 10., 0., 26.
2, 8., 0., 26.
3, 6., 0., 26.
4, 4., 0., 26.
5, 2., 0., 26.
6, 0., 0., 26.
7, 10., 0., 24.
8, 8., 0., 24.
9, 6., 0., 24.
10, 4., 0., 24.
11, 2., 0., 24.
12, 0., 0., 24.
13, 10., 0., 22.
14, 8., 0., 22.
15, 6., 0., 22.
16, 4., 0., 22.
17, 2., 0., 22.
18, 0., 0., 22.
19, 10., 0., 20.
20, 8., 0., 20.
21, 6., 0., 20.
22, 4., 0., 20.
23, 2., 0., 20.
24, 0., 0., 20.
25, 10., 0., 18.
26, 8., 0., 18.
27, 6., 0., 18.
28, 4., 0., 18.
29, 2., 0., 18.
30, 0., 0., 18.
31, 10., 0., 16.
32, 8., 0., 16.
33, 6., 0., 16.
34, 4., 0., 16.
35, 2., 0., 16.
36, 0., 0., 16.
37, 10., 0., 14.
38, 8., 0., 14.
39, 6., 0., 14.
40, 4., 0., 14.
41, 2., 0., 14.
42, 0., 0., 14.
43, 10., 0., 12.
44, 8., 0., 12.
45, 6., 0., 12.
46, 4., 0., 12.
47, 2., 0., 12.
48, 0., 0., 12.
49, 10., 0., 10.
50, 8., 0., 10.
51, 6., 0., 10.
52, 4., 0., 10.
53, 2., 0., 10.
54, 0., 0., 10.
55, 10., 0., 8.
56, 8., 0., 8.
57, 6., 0., 8.
58, 4., 0., 8.
59, 2., 0., 8.
60, 0., 0., 8.
61, 10., 0., 6.
62, 8., 0., 6.
63, 6., 0., 6.
64, 4., 0., 6.
65, 2., 0., 6.
66, 0., 0., 6.
67, 10., 0., 4.
68, 8., 0., 4.
69, 6., 0., 4.
70, 4., 0., 4.
71, 2., 0., 4.
72, 0., 0., 4.
73, 10., 0., 2.
74, 8., 0., 2.
75, 6., 0., 2.
76, 4., 0., 2.
77, 2., 0., 2.
78, 0., 0., 2.
79, 10., 0., 0.
80, 8., 0., 0.
81, 6., 0., 0.
82, 4., 0., 0.
83, 2., 0., 0.
84, 0., 0., 0.
*Element, type=S4R
1, 1, 2, 8, 7
2, 2, 3, 9, 8
3, 3, 4, 10, 9
4, 4, 5, 11, 10
5, 5, 6, 12, 11
6, 7, 8, 14, 13
7, 8, 9, 15, 14
8, 9, 10, 16, 15
9, 10, 11, 17, 16
10, 11, 12, 18, 17
11, 13, 14, 20, 19
12, 14, 15, 21, 20
13, 15, 16, 22, 21
14, 16, 17, 23, 22
15, 17, 18, 24, 23
16, 19, 20, 26, 25
17, 20, 21, 27, 26
18, 21, 22, 28, 27
19, 22, 23, 29, 28
20, 23, 24, 30, 29
21, 25, 26, 32, 31
22, 26, 27, 33, 32
23, 27, 28, 34, 33
24, 28, 29, 35, 34
25, 29, 30, 36, 35
26, 31, 32, 38, 37
27, 32, 33, 39, 38
28, 33, 34, 40, 39
29, 34, 35, 41, 40
30, 35, 36, 42, 41
31, 37, 38, 44, 43
32, 38, 39, 45, 44
33, 39, 40, 46, 45
34, 40, 41, 47, 46
35, 41, 42, 48, 47
36, 43, 44, 50, 49
37, 44, 45, 51, 50
38, 45, 46, 52, 51
39, 46, 47, 53, 52
40, 47, 48, 54, 53
41, 49, 50, 56, 55
42, 50, 51, 57, 56
43, 51, 52, 58, 57
44, 52, 53, 59, 58
45, 53, 54, 60, 59
46, 55, 56, 62, 61
47, 56, 57, 63, 62
48, 57, 58, 64, 63
49, 58, 59, 65, 64
50, 59, 60, 66, 65
51, 61, 62, 68, 67
52, 62, 63, 69, 68
53, 63, 64, 70, 69
54, 64, 65, 71, 70
55, 65, 66, 72, 71
56, 67, 68, 74, 73
57, 68, 69, 75, 74
58, 69, 70, 76, 75
59, 70, 71, 77, 76
60, 71, 72, 78, 77
61, 73, 74, 80, 79
62, 74, 75, 81, 80
63, 75, 76, 82, 81
64, 76, 77, 83, 82
65, 77, 78, 84, 83
*Nset, nset=_PickedSet3, internal, generate
1, 84, 1
*Elset, elset=_PickedSet3, internal, generate
1, 65, 1
** Section: Section-2
*Shell Section, elset=_PickedSet3, material=Material-2
0.01, 5
*End Part
**
**
** ASSEMBLY
**
*Assembly, name=Assembly
**
*Instance, name=Part-1-1, part=Part-1
-5.74196216818474e-15, 13., 4.99999999999999
-5.74196216818474e-15, 13., 4.99999999999999, 0.577350279552036, 13.577350279552, 4.42264972044795, 119.999999109416
*End Instance
**
*Instance, name=Part-2-1, part=Part-2
-0.00500000000000903, 20.5, 5.005
-0.00500000000000903, 20.5, 5.005, 0.572350279552033, 21.077350279552, 4.42764972044795, 119.999999109416
*End Instance
**
*Instance, name=Part-3-1, part=Part-3
6., -5.5, 5.
6., -5.5, 5., 6.57735027955204, -6.07735027955204, 4.42264972044796, 240.000000890584
*End Instance
**
*Nset, nset=_PickedSet37, internal, instance=Part-2-1, generate
1, 196, 1
*Elset, elset=_PickedSet37, internal, instance=Part-2-1, generate
1, 169, 1
*Nset, nset=_PickedSet38, internal, instance=Part-3-1, generate
1, 84, 1
*Elset, elset=_PickedSet38, internal, instance=Part-3-1, generate
1, 65, 1
*Nset, nset=Set-1, instance=Part-3-1
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
81, 83, 84
*Nset, nset=Set-2, instance=Part-3-1
82,
** Constraint: Constraint-1
*Equation
2
Set-1, 1, 1.
Set-2, 1, -1.
*End Assembly
*Amplitude, name=Amp-1, definition=SMOOTH STEP
0., 0., 10., 1.
**
** MATERIALS
**
*MATERIAL, NAME=MATERIAL-1
**
*USER MATERIAL, CONSTANTS=22, UNSYMM
45000.,0.3,1.,0.,0.,0.,0.,1.
4.,1.,0.,10.,20.,150.,7500.,40.,
260.,7500.,5.,200.,0.11,10.
*Depvar
163
**
*Material, name=Material-2
*Elastic
200000., 0.3
**
** INTERACTION PROPERTIES
**
*Surface Interaction, name=IntProp-1
1.,
*Friction, slip tolerance=0.005
0.05,
*Surface Behavior, pressure-overclosure=HARD
**
** INTERACTIONS
**
** Interaction: Int-1
*Contact
*Contact Inclusions, ALL EXTERIOR
*Contact Property Assignment
, , IntProp-1
** ----------------------------------------------------------------
**
** STEP: Step-1
**
*Step, name=Step-1, nlgeom=YES, inc=10000
*Static
0.1, 10., 1e-05, 0.1
**
** BOUNDARY CONDITIONS
**
** Name: BC-1 Type: Displacement/Rotation
*Boundary
_PickedSet37, 1, 1
_PickedSet37, 2, 2
_PickedSet37, 3, 3
_PickedSet37, 4, 4
_PickedSet37, 5, 5
_PickedSet37, 6, 6
** Name: BC-2 Type: Displacement/Rotation
*Boundary
_PickedSet38, 2, 2
_PickedSet38, 3, 3
_PickedSet38, 4, 4
_PickedSet38, 5, 5
_PickedSet38, 6, 6
** Name: BC-4 Type: Displacement/Rotation
*Boundary, amplitude=Amp-1
Set-2, 1, 1, -1.
**
** OUTPUT REQUESTS
**
*Restart, write, number interval=1, time marks=NO
**
** FIELD OUTPUT: F-Output-1
**
*Output, field, number interval=100, time marks=NO
*Node Output
CF, RF, U
*Element Output, directions=YES
LE, PE, PEEQ, PEMAG, S, SDV
*Contact Output
CSTRESS,
**
** HISTORY OUTPUT: H-Output-1
**
*Output, history, variable=PRESELECT
*End Step

View file

@ -0,0 +1,160 @@
# Import Abaqus and External Modules
from abaqusConstants import *
from abaqus import *
import random
import regionToolset
import mesh
import step
import part
randomSeed=[41557]
for eachModel in range(0,1):
#
# Create Model Database
VerFile=Mdb(pathName="MStructure")
VerModel=VerFile.models['Model-1']
VerAssembly=VerModel.rootAssembly
#
# Underlying Geometry
xSize=0.1
ySize=0.05
#
# Microstructure Geometry
charLength=0.00595 #Grain Side Length
numX=15
numY=5
#
# Other Parametersvgrain vumat
meshSize=0.001
analysis='Tension' # Options: Tension, Bending
#
# Draw Base Part
BasePart=VerModel.Part(name='Base', dimensionality=THREE_D,type=DEFORMABLE_BODY)
BaseSketch = VerModel.ConstrainedSketch(name='Base',sheetSize=200.0)
#
BaseSketch.Line(point1=(0.,0.),point2=(xSize,0.))
BaseSketch.Line(point1=(xSize,0.),point2=(xSize,ySize))
BaseSketch.Line(point1=(xSize,ySize),point2=(0.,ySize))
BaseSketch.Line(point1=(0.,ySize),point2=(0.,0.))
BasePart.BaseSolidExtrude(sketch=BaseSketch, depth=0.006)
BasePart=VerModel.parts['Base']
#
# Draw Microstructure and Partition Base Part
ParSketch=VerModel.ConstrainedSketch(name='Par',sheetSize=200)
yLength=sin(radians(30.))*charLength
xLength=cos(radians(30.))*charLength
offsetX=0.
for i in range(0,numX):
offsetY=0.
for j in range(0,numY):
if j%2==0:
xPos=offsetX
else:
xPos=offsetX+xLength
ParSketch.Line(point1=(xLength+xPos,-yLength+offsetY),point2=(xLength+xPos,yLength+offsetY))
ParSketch.Line(point1=(xLength+xPos,+yLength+offsetY),point2=(xPos,2.*yLength+offsetY))
ParSketch.Line(point1=(xLength+xPos,-yLength+offsetY),point2=(xPos,-2.*yLength+offsetY))
offsetY=offsetY+3.*yLength
offsetX=offsetX+2.*xLength
for eachFace in BasePart.faces:
if eachFace.getNormal()==(0.0,0.0,1.0):
targetFace=eachFace
print targetFace
BasePart.PartitionFaceBySketch(faces=targetFace, sketch=ParSketch)
#
# Generate Sections and Section Assignments
labelcount=1
regions=BasePart.faces
for eachregion in regions:
mlabel='Mat'+str(labelcount)
VerModel.PEGSection(name=mlabel, material=mlabel, thickness=0.01,
wedgeAngle1=0.0, wedgeAngle2=0.0)
BasePart.SectionAssignment(region=(eachregion,),
sectionName=mlabel, offset=0.0, offsetField='')
labelcount=labelcount+1
#
# Mesh Part
BasePart.ReferencePoint(point=(0.0, 0.0, 0.0))
offsetX=0.
offsetY=0.
ParSketch2=VerModel.ConstrainedSketch(name='Hex',sheetSize=200, transform=partTransform)
for i in range(0,2*numX):
ParSketch2.Line(point1=(offsetX,0.),point2=(offsetX,2.*charLength*numY))
offsetX=offsetX+xLength
for i in range(0,numY):
ParSketch2.Line(point1=(0.,offsetY),point2=(2.*charLength*numX,offsetY))
offsetY=offsetY+3.*yLength
BasePart.PartitionFaceBySketch(faces=BasePart.faces, sketch=ParSketch2)
BasePart.setMeshControls(regions=BasePart.faces, elemShape=QUAD, technique=SWEEP)
BasePart.seedPart(size=meshSize)
pickedRegions =(BasePart.faces, )
elemType1 = mesh.ElemType(elemCode=CPEG8R, elemLibrary=STANDARD)
BasePart.setElementType(regions=pickedRegions, elemTypes=(elemType1,))
BasePart.generateMesh()
#
#Steps
VerModel.StaticStep(name='Step-1', previous='Initial',
maxNumInc=100000, initialInc=0.03, minInc=1e-07, maxInc=0.15, nlgeom=ON, timePeriod=20.)
VerModel.fieldOutputRequests['F-Output-1'].setValues(variables=(
'LE', 'RF', 'S', 'U'), timeInterval=0.2, timeMarks=OFF)
#
#Boundary Conditions
VerAssembly.Instance(name='Strut',part=BasePart, dependent=ON)
iNodes=VerAssembly.instances['Strut'].nodes
toler=0.01*meshSize
Left=iNodes.getByBoundingBox(xMin=-toler,xMax=toler,yMin=-toler,yMax=ySize+toler)
BLeft=iNodes.getByBoundingBox(xMin=-toler,xMax=toler,yMin=-toler,yMax=toler)
Right=iNodes.getByBoundingBox(xMin=xSize-toler,xMax=xSize+toler,yMin=toler,yMax=ySize+toler)
BRight=iNodes.getByBoundingBox(xMin=xSize-toler,xMax=xSize+toler,yMin=-toler,yMax=toler)
#
Lregion=regionToolset.Region(nodes=Left)
BLregion=regionToolset.Region(nodes=BLeft)
Rregion=regionToolset.Region(nodes=Right)
BRregion=regionToolset.Region(nodes=BRight)
#
VerModel.SmoothStepAmplitude(name='Amp-1', timeSpan=TOTAL, data=(( 0.0, 0.0), (24.00, 1.0)))
VerModel.DisplacementBC(name='LeftX', createStepName='Initial',
region=Lregion, u1=0.0, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET,
ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM)
VerModel.DisplacementBC(name='BottomY1', createStepName='Initial',
region=BLregion, u1=UNSET, u2=0.0, u3=UNSET, ur1=UNSET, ur2=UNSET,
ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM)
if analysis=='Tension':
VerModel.DisplacementBC(name='Tension', createStepName='Step-1',
region=BRregion, u1=0.5*xSize, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET,
ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM)
VerModel.DisplacementBC(name='BottomY2', createStepName='Initial',
region=BRregion, u1=UNSET, u2=0.0, u3=UNSET, ur1=UNSET, ur2=UNSET,
ur3=UNSET, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM)
VerModel.boundaryConditions['Tension'].setValues(amplitude='Amp-1')
else:
VerModel.DisplacementBC(name='Bending', createStepName='Step-1',
region=BRregion, u1=UNSET, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET,
ur3=-6., amplitude=UNSET, fixed=OFF, distributionType=UNIFORM)
VerModel.boundaryConditions['Bending'].setValues(amplitude='Amp-1')
#
VerAssembly.Set(nodes=Right, name='Right')
VerAssembly.Set(nodes=BRight, name='BRight')
if analysis=='Tension':
VerModel.Equation(name='Constraint-1', terms=((1.0, 'Right', 1), ( -1.0, 'BRight', 1)))
else:
region1=VerAssembly.sets['BRight']
region2=VerAssembly.sets['Right']
VerModel.MultipointConstraint(name='Constraint-2',
controlPoint=region1, surface=region2, mpcType=BEAM_MPC,
userMode=DOF_MODE_MPC, userType=0, csys=None)
#
#Create Job and write input file
if grainType=='Square':
letter1='S'
elif grainType=='Hexagon':
letter1='H'
elif grainType=='Voronoi':
letter1='V'
if analysis=='Tension':
letter2='T'
else:
letter2='B'
label='W'+str(numY)+'L'+str(numX)+letter1+letter2+str(eachModel)
VerFile.Job(name=label, model='Model-1', type=ANALYSIS,userSubroutine='ucrystal.for')
VerFile.jobs[label].writeInput(consistencyChecking=OFF)
# VerFile.close()

View file

@ -0,0 +1,49 @@
from abaqusConstants import *
from abaqus import *
import random
incFile=open('Ori29.dat','w')
# seeds 1-10
#random.seed(79789)
#random.seed(673673)
#random.seed(868256)
#random.seed(15675676)
#random.seed(8836572)
# seeds 20-29
random.seed(6753679)
random.seed(88822657)
random.seed(267567)
random.seed(833683655)
random.seed(566445)
for i in range(1,1000):
# Generate 'c' direction
angle1=random.random()*2.*pi
sigma=0.02 # extruded rod
a2=random.normalvariate(1., sigma)
if a2>1.:
a2=1.-(a2-1.)
angle2=acos(a2)
# angle2=acos(random.random()) # homogeneous
cx=cos(angle1)*cos(angle2)
cy=sin(angle1)*cos(angle2)
cz=sin(angle2)
# Get arbitary normal to C
nx=cos(angle1)*cos(angle2+pi/2.)
ny=sin(angle1)*cos(angle2+pi/2.)
nz=sin(angle2+pi/2.)
# Rotate about random angle
a3=random.random()*2.*pi
xx=nx*(cos(a3)+cx*cx*(1.-cos(a3)))+ny*(cx*cy*(1.-cos(a3))-cz*sin(a3))+nz*(cx*cz*(1.-cos(a3))+cy*sin(a3))
xy=nx*(cx*cy*(1.-cos(a3))+cz*sin(a3))+ny*(cos(a3)+cy*cy*(1.-cos(a3)))+nz*(cy*cz*(1.-cos(a3))-cx*sin(a3))
xz=nx*(cz*cx*(1.-cos(a3))-cy*sin(a3))+ny*(cz*cy*(1.-cos(a3))+cx*sin(a3))+nz*(cos(a3)+cz*cz*(1.-cos(a3)))
# Y-Axis is normal to C and X
yx=xy*cz-xz*cy
yy=xz*cx-xx*cz
yz=xx*cy-xy*cx
incFile.write('*MATERIAL, NAME=Mat '+str(i)+ '\n')
incFile.write('*USER MATERIAL, CONSTANTS=22, UNSYMM \n')
incFile.write('45000.,0.3,'+str(xx)+','+str(xy)+','+str(xz)+','+str(yx)+','+str(yy)+','+str(yz)+' \n')
incFile.write('4.,1.,0.,10.,20.,150.,7500.,40., \n')
incFile.write('260.,7500.,5.,200.,0.11,10. \n')
incFile.write('*Depvar \n')
incFile.write(str(163)+' \n')
incFile.close()

35
JMBBM13b/Orientations.py Normal file
View file

@ -0,0 +1,35 @@
from abaqusConstants import *
from abaqus import *
import random
outFile = open('ori.dat',"w")
random.seed(658468764)
# Generate 'c' direction
for i in range(0,500):
angle1=random.random()*2.*pi
sigma=0.02 # extruded rod
a2=random.normalvariate(1., sigma)
if a2>1.:
a2=1.-(a2-1.)
# a2=acos(random.random()) # homogeneous
angle2=acos(a2)
cx=cos(angle1)*cos(angle2)
cy=sin(angle1)*cos(angle2)
cz=sin(angle2)
# Get Stereo Projection
# sx=cx*(1.-(cz/(1.+cz)))
# sy=cy*(1.-(cz/(1.+cz)))
# Get arbitary normal to C
nx=cos(angle1)*cos(angle2+pi/2.)
ny=sin(angle1)*cos(angle2+pi/2.)
nz=sin(angle2+pi/2.)
# Rotate about random angle
a3=random.random()*2.*pi
xx=nx*(cos(a3)+cx*cx*(1.-cos(a3)))+ny*(cx*cy*(1.-cos(a3))-cz*sin(a3))+nz*(cx*cz*(1.-cos(a3))+cy*sin(a3))
xy=nx*(cx*cy*(1.-cos(a3))+cz*sin(a3))+ny*(cos(a3)+cy*cy*(1.-cos(a3)))+nz*(cy*cz*(1.-cos(a3))-cx*sin(a3))
xz=nx*(cz*cx*(1.-cos(a3))-cy*sin(a3))+ny*(cz*cy*(1.-cos(a3))+cx*sin(a3))+nz*(cos(a3)+cz*cz*(1.-cos(a3)))
# Y-Axis is normal to C and X
yx=xy*cz-xz*cy
yy=xz*cx-xx*cz
yz=xx*cy-xy*cx
#Tests
outFile.close()

View file

@ -0,0 +1,3 @@
Journal Article: https://zenodo.org/records/11184080
Supporting Data - including original software versions: https://doi.org/10.1016/j.jmbbm.2014.01.007

1026
JMBBM13b/UCrys_HCP_Only.for Normal file

File diff suppressed because it is too large Load diff

757
JMBBM13b/VCrys_HCP_Only.for Normal file
View file

@ -0,0 +1,757 @@
subroutine vumat(nblock, ndir, nshr, nstatev, nfieldv, nprops,
* lanneal, steptime, totaltime, dt, cmname, coordmp, charlength,
* props, density, straininc, relspininc, tempold, stretchold,
* defgradold, fieldold, stressold, stateold, enerinternold,
* enerinelasold, tempnew, stretchnew, defgradnew, fieldnew,
* stressnew, statenew, enerinternnew, enerinelasnew)
c
include 'vaba_param.inc'
c modified from harewood vumat- jg:20/07/12
dimension stressold(nblock,ndir+nshr),
1 stressnew(nblock,ndir+nshr),
1 stateold(nblock,nstatev),statenew(nblock,nstatev),
1 straininc(nblock, ndir+nshr)
dimension slpdir(3,18),slpnor(3,18),slpdef(6,18),slpspn(3,18),
1 dspdir(3,18),dspnor(3,18),d(6,6),fslip(18),dfdxsp(18),
1 ddemsd(6,18),h(18,18),dgamma(18),dtausp(18),dgslip(18),
1 dstres(6),delats(6),dvgrad(3,3),dspin(3),workst(18,18),
1 indx(18),term(3,3),trm0(3,3),props(nprops),itrm(3),
1 rotate(3,3),rwkdir(3,24),rwknor(3,24),indxL(3),termd(3),
1 termn(3),tauslpA(18)
c
do km=1,nblock
C----- As the VUMAT passes in tensor shear strain and this subroutine
C----- uses engineering strain --> STRAININC(shr) x 2
do i=1,nshr
straininc(km,i+3)=straininc(km,i+3)*2.d0
end do
if (nshr.gt.1) then
save=straininc(km,5)
straininc(km,5)=straininc(km,6)
straininc(km,6)=save
save=stressold(km,5)
stressold(km,5)=stressold(km,6)
stressold(km,6)=save
end if
C Elastic Matrix {D}
gshear = props(1)/(2.d0*(1.d0+props(2)))
e11 = 2.d0*gshear*(1.d0-props(2))/(1.d0-2.d0*props(2))
e12 = 2.d0*gshear*props(2)/(1.d0-2.d0*props(2))
d = 0.d0
do j = 1,3
d(j,j) = e11
do i = 1,3
if(i.ne.j) d(i,j) = e12
end do
d(j+3,j+3) = gshear
end do
c Lin Elastic Response for Exp/Packager
if(totaltime==0.)then
C Calculation of Stress Inc
dstres=0.d0
do i=1,ndir+nshr
do j=1,ndir+nshr
dstres(i)=dstres(i)+d(i,j)*straininc(km,j)
end do
end do
C Calculation of Stress New
do i=1,ndir+nshr
stressnew(km,i)=stressold(km,i)+dstres(i)
end do
cycle
endif
c------ Crystal Type:
ictype=nint(props(9))
if(ictype == 2)then
nslptl = 6
elseif(ictype == 3)then
nslptl = 12
else
nslptl = 18
endif
C----- Integration parameter: THETA
theta = 0.5d0
term = 0.d0
trm0 = 0.d0
do i=1,3
term(i,i)=2.d0
end do
call ludcmp (term, 3, 3, itrm, ddcmp)
do j=1,3
call lubksb (term, 3, 3, itrm, trm0(1,j))
end do
dspin(1)=trm0(2,1)-trm0(1,2)
dspin(2)=trm0(1,3)-trm0(3,1)
dspin(3)=trm0(3,2)-trm0(2,3)
C----- Increment of dilatational strain: DEV
dev=0.d0
do i=1,ndir
dev=dev+straininc(km,i)
end do
C----- Check whether the current stress state is the initial state
if (stateold(km,1).eq.0.) then
c ##### basal and prismatic#####
c----- generating slip directions and normals for hcp-basal
rwkdir = 0.
rwknor = 0.
angle = acos(-1.)/3.
cangle = cos(angle)
sangle = sin(angle)
rwkdir(1,1) = 1.
rwkdir(2,1) = 0.
rwkdir(1,2) = cangle
rwkdir(2,2) = sangle
rwkdir(1,3) = -cangle
rwkdir(2,3) = sangle
rwknor(3,1) = 1.
do i = 1,3
do k = 1,3
slpdir(k,i) = rwkdir(k,i)
slpnor(k,i) = rwknor(k,1)
enddo
enddo
c----- generating slip directions and normals for hcp-prismatic
rwknor = 0.
rwknor(1,1) = 0.
rwknor(2,1) = -1.
rwknor(1,2) = sangle
rwknor(2,2) = -cangle
rwknor(1,3) = -sangle
rwknor(2,3) = -cangle
do i = 4,6
do k = 1,3
slpdir(k,i) = rwkdir(k,i-3)
slpnor(k,i) = rwknor(k,i-3)
enddo
enddo
if(ictype >= 3)then
c ##### 2nd order pyramidal <a+c> #####
aspect = 1.623
c slip directions
do j = 1,6
rwkdir(3,j) = -aspect
enddo
rwkdir(1,1) = cangle
rwkdir(2,1) = sangle
rwkdir(1,2) = -cangle
rwkdir(2,2) = sangle
rwkdir(1,3) = 2.*cangle
rwkdir(2,3) = 0.
do j = 4,6
rwkdir(1,j) = -rwkdir(1,j-3)
rwkdir(2,j) = -rwkdir(2,j-3)
enddo
rlength=sqrt(1.+aspect*aspect)
do j = 1,6
do i = 1,3
rwkdir(i,j) = rwkdir(i,j)/rlength
enddo
enddo
c slip normals
rwknor(1,1) = aspect*sangle
rwknor(2,1) = 3.*aspect*cangle
rwknor(3,1) = 4.*sangle*cangle
rwknor(1,2) = aspect*sangle
rwknor(2,2) = -3.*aspect*cangle
rwknor(3,2) = 4.*sangle*cangle
rwknor(1,3) = 2.*aspect*sangle
rwknor(2,3) = 0.
rwknor(3,3) = 4.*sangle*cangle
do j = 4,6
rwknor(1,j) = rwknor(1,j-3)
rwknor(2,j) = rwknor(2,j-3)
rwknor(3,j) = -rwknor(3,j-3)
enddo
rlength=sqrt(3.*(1.+aspect*aspect))
do j = 1,6
do i = 1,3
rwknor(i,j) = rwknor(i,j)/rlength
enddo
enddo
nslip = 6
do j = 1,6
nslip = nslip+1
do i = 1,3
slpdir(i,nslip) = rwkdir(i,j)
slpnor(i,nslip) = rwknor(i,j)
enddo
enddo
if(ictype == 4)then
c ###### twinning planes #####
c slip directions
do j = 1,6
rwkdir(3,j) = -aspect
enddo
rwkdir(1,1) = 0.
rwkdir(2,1) = 2.*sangle
rwkdir(1,2) = 3.*cangle
rwkdir(2,2) = 1.*sangle
rwkdir(1,3) = 3.*cangle
rwkdir(2,3) = -1.*sangle
do j = 4,6
rwkdir(1,j) = -rwkdir(1,j-3)
rwkdir(2,j) = -rwkdir(2,j-3)
enddo
rlength=sqrt(3.+aspect*aspect)
do j = 1,6
do i = 1,3
rwkdir(i,j) = rwkdir(i,j)/rlength
enddo
enddo
c slip normals
rwknor(1,1) = 0.
rwknor(2,1) = -2.*aspect*cangle
rwknor(3,1) = -4.*sangle*cangle
rwknor(1,2) = -aspect*sangle
rwknor(2,2) = -aspect*cangle
rwknor(3,2) = -4.*sangle*cangle
rwknor(1,3) = -aspect*sangle
rwknor(2,3) = aspect*cangle
rwknor(3,3) = -4.*sangle*cangle
do j = 4,6
rwknor(1,j) = -rwknor(1,j-3)
rwknor(2,j) = -rwknor(2,j-3)
rwknor(3,j) = rwknor(3,j-3)
enddo
do j = 1,6
do i = 1,3
rwknor(i,j) = rwknor(i,j)/rlength
enddo
enddo
do j = 1,6
nslip = nslip+1
do i = 1,3
slpdir(i,nslip) = rwkdir(i,j)
slpnor(i,nslip) = rwknor(i,j)
enddo
enddo
endif
endif
C----- Unit vectors in slip dirs and unit norms-Global system
c----- Generate rotation matrix
do i = 1,3
term(i,1) = props(i+2)
term(i,2) = props(i+5)
enddo
term(1,3) = term(2,1)*term(3,2)-term(3,1)*term(2,2)
term(2,3) = term(3,1)*term(1,2)-term(1,1)*term(3,2)
term(3,3) = term(1,1)*term(2,2)-term(2,1)*term(1,2)
call ludcmp (term, 3, 3, indxL, dcmp)
rotate = 0.
do j = 1,3
rotate(j,j) = 1.
end do
do j = 1,3
call lubksb (term, 3, 3, indxL, rotate(1,j))
end do
c--- Rotate slip normals and directions to global system
do j = 1,nslptl
do i = 1,3
termd(i) = 0.
termn(i) = 0.
do k = 1,3
termd(i) = termd(i)+rotate(i,k)*slpdir(k,j)
termn(i) = termn(i)+rotate(i,k)*slpnor(k,j)
end do
end do
do i = 1,3
slpdir(i,j) = termd(i)
slpnor(i,j) = termn(i)
end do
end do
C----- Slip deformation tensor: SLPDEF (Schmid factors)
do j=1,nslptl
slpdef(1,j)=slpdir(1,j)*slpnor(1,j)
slpdef(2,j)=slpdir(2,j)*slpnor(2,j)
slpdef(3,j)=slpdir(3,j)*slpnor(3,j)
slpdef(4,j)=slpdir(1,j)*slpnor(2,j)
1 +slpdir(2,j)*slpnor(1,j)
slpdef(5,j)=slpdir(1,j)*slpnor(3,j)
1 +slpdir(3,j)*slpnor(1,j)
slpdef(6,j)=slpdir(2,j)*slpnor(3,j)
1 +slpdir(3,j)*slpnor(2,j)
end do
C----- Store normals and directions
stateold(km,nstatev) = nslptl
idnor=3*nslptl
iddir=6*nslptl
do j=1,nslptl
do i=1,3
idnor=idnor+1
stateold(km,idnor)=slpnor(i,j)
iddir=iddir+1
stateold(km,iddir)=slpdir(i,j)
end do
end do
C----- Initial value of the current strength for all slip systems
do j=1,nslptl
if(j<=3)then
stateold(km,j)=props(10)
elseif(j<=6)then
stateold(km,j)=props(13)
elseif(j<=12)then
stateold(km,j)=props(16)
else
stateold(km,j)=props(19)
endif
enddo
C----- Initial value of shear strain in slip systems
do i=1,nslptl
stateold(km,nslptl+i)=0.d0
end do
stateold(km,9*nslptl+1)=0.d0
C----- Initial value of the resolved shear stress in slip systems
do i=1,nslptl
term1=0.
do j=1,ndir+nshr
if (j.le.ndir) then
term1=term1+slpdef(j,i)*stressold(km,j)
else
term1=term1+slpdef(j-ndir+3,i)*stressold(km,j)
end if
end do
stateold(km,2*nslptl+i)=term1
end do
else
C----- Current stress state
idnor=3*nslptl
iddir=6*nslptl
do j=1,nslptl
do i=1,3
idnor=idnor+1
slpnor(i,j)=stateold(km,idnor)
iddir=iddir+1
slpdir(i,j)=stateold(km,iddir)
end do
end do
C----- Slip deformation tensor: SLPDEF (Schmid factors)
do j=1,nslptl
slpdef(1,j)=slpdir(1,j)*slpnor(1,j)
slpdef(2,j)=slpdir(2,j)*slpnor(2,j)
slpdef(3,j)=slpdir(3,j)*slpnor(3,j)
slpdef(4,j)=slpdir(1,j)*slpnor(2,j)
1 +slpdir(2,j)*slpnor(1,j)
slpdef(5,j)=slpdir(1,j)*slpnor(3,j)
1 +slpdir(3,j)*slpnor(1,j)
slpdef(6,j)=slpdir(2,j)*slpnor(3,j)
1 +slpdir(3,j)*slpnor(2,j)
end do
end if
C----- Slip spin tensor: SLPSPN
do j=1,nslptl
slpspn(1,j)=0.5d0*(slpdir(1,j)*slpnor(2,j)-
2 slpdir(2,j)*slpnor(1,j))
slpspn(2,j)=0.5d0*(slpdir(3,j)*slpnor(1,j)-
2 slpdir(1,j)*slpnor(3,j))
slpspn(3,j)=0.5d0*(slpdir(2,j)*slpnor(3,j)-
2 slpdir(3,j)*slpnor(2,j))
end do
C----- Double dot product of elastic moduli tensor with the slip
C deformation tensor
do j=1,nslptl
do i=1,6
ddemsd(i,j)=0.d0
do k=1,6
ddemsd(i,j)=ddemsd(i,j)+d(k,i)*slpdef(k,j)
end do
end do
end do
do j=1,nslptl
ddemsd(4,j)=ddemsd(4,j)-slpspn(1,j)*stressold(km,1)
ddemsd(5,j)=ddemsd(5,j)+slpspn(2,j)*stressold(km,1)
if (ndir.gt.1) then
ddemsd(4,j)=ddemsd(4,j)+slpspn(1,j)*stressold(km,2)
ddemsd(6,j)=ddemsd(6,j)-slpspn(3,j)*stressold(km,2)
end if
if (ndir.gt.2) then
ddemsd(5,j)=ddemsd(5,j)-slpspn(2,j)*stressold(km,3)
ddemsd(6,j)=ddemsd(6,j)+slpspn(3,j)*stressold(km,3)
end if
if (nshr.ge.1) then
ddemsd(1,j)=ddemsd(1,j)+slpspn(1,j)
2 *stressold(km,ndir+1)
ddemsd(2,j)=ddemsd(2,j)-slpspn(1,j)
2 *stressold(km,ndir+1)
ddemsd(5,j)=ddemsd(5,j)-slpspn(3,j)
2 *stressold(km,ndir+1)
ddemsd(6,j)=ddemsd(6,j)+slpspn(2,j)
2 *stressold(km,ndir+1)
end if
if (nshr.ge.2) then
ddemsd(1,j)=ddemsd(1,j)-slpspn(2,j)
2 *stressold(km,ndir+2)
ddemsd(3,j)=ddemsd(3,j)+slpspn(2,j)
2 *stressold(km,ndir+2)
ddemsd(4,j)=ddemsd(4,j)+slpspn(3,j)
2 *stressold(km,ndir+2)
ddemsd(6,j)=ddemsd(6,j)-slpspn(1,j)
2 *stressold(km,ndir+2)
end if
if (nshr.eq.3) then
ddemsd(2,j)=ddemsd(2,j)+slpspn(3,j)
2 *stressold(km,ndir+3)
ddemsd(3,j)=ddemsd(3,j)-slpspn(3,j)
2 *stressold(km,ndir+3)
ddemsd(4,j)=ddemsd(4,j)-slpspn(2,j)
2 *stressold(km,ndir+3)
ddemsd(5,j)=ddemsd(5,j)+slpspn(1,j)
2 *stressold(km,ndir+3)
end if
end do
C----- Shear strain-rate in a slip system at the start of increment:
do i=1,nslptl
tauslp=stateold(km,2*nslptl+i)
if(i>=13.and.tauslp<=0)then
yield=1.e6
else
yield=stateold(km,i)
endif
x=tauslp/yield
fslip(i)=0.001d0*((abs(x))**50.)*dsign(1.d0,x)
dfdxsp(i)=50.d0*0.001d0*(abs(x))**(50.-1.0)
end do
C----- Self- and latent-hardening laws
gamtol=stateold(km,9*nslptl+1)
do iself = 1,nslptl
do latent = 1,nslptl
C BASAL
if(iself <= 3)then
if(latent <= 3)then
q = 0.2
else
q = 0.5
endif
if(iself == latent)q = 1.
hlatnt = q*props(12)
C PRISM
elseif(iself <= 6)then
if(latent <= 12)then
q = 0.2
else
q = 0.5
endif
if(iself == latent)q = 1.
hlatnt = q*props(15)*(1.d0-(props(13)/props(14)))
* *exp(-props(15)*(gamtol/props(14)))
C PYRM
elseif(iself <= 12)then
if(latent <= 6)then
q = 1.
elseif(latent <= 12)then
q = 0.2
else
q = 0.25
endif
if(iself == latent)q = 1.
hlatnt = q*props(18)*(1.d0-props(16)/props(17))
* *exp(-props(18)*gamtol/props(17))
C TWIN
else
if(latent <= 6)then
q = 1.
else
q = 0.2
endif
if(iself == latent)q = 1.
if(gamtol <= props(21))then
hlatnt = q*props(20)
else
hlatnt = q*props(20)*(gamtol/props(21))
* **(props(22)-1.)
endif
endif
h(iself,latent) = hlatnt
enddo
end do
C----- Solve the increment of shear strain in a slip system
term1=theta*dt
do i=1,nslptl
tauslp=stateold(km,2*nslptl+i)
if(i>=13.and.tauslp<=0)then
yield=1.e6
else
yield=stateold(km,i)
endif
x=tauslp/yield
term2=term1*dfdxsp(i)/yield
term3=term1*x*dfdxsp(i)/yield
do j=1,nslptl
term4=0.d0
do k=1,6
term4=term4+ddemsd(k,i)*slpdef(k,j)
end do
workst(i,j)=term2*term4+h(i,j)*term3
2 *dsign(1.d0,fslip(j))
end do
workst(i,i)=workst(i,i)+1.d0
end do
call ludcmp (workst, nslptl, 18, indx, ddcmp)
C----- Increment of shear strain in a slip system
term1=theta*dt
do i=1,nslptl
tauslp=stateold(km,2*nslptl+i)
if(i>=13.and.tauslp<=0)then
yield=1.e6
else
yield=stateold(km,i)
endif
term2=term1*dfdxsp(i)/yield
dgamma(i)=0.
do j=1,ndir
dgamma(i)=dgamma(i)+ddemsd(j,i)*straininc(km,j)
end do
if (nshr.gt.0) then
do j=1,nshr
if (j.eq.1) then
dgamma(i)=dgamma(i)+ddemsd(4,i)
2 *straininc(km,4)
elseif (j.eq.2) then
dgamma(i)=dgamma(i)+ddemsd(6,i)
2 *straininc(km,5)
elseif (j.eq.3) then
dgamma(i)=dgamma(i)+ddemsd(5,i)
2 *straininc(km,6)
end if
end do
end if
dgamma(i)=dgamma(i)*term2+fslip(i)*dt
end do
call lubksb (workst, nslptl, 18, indx, dgamma)
C----- Update the shear strain in a slip system:
do i=1,nslptl
stateold(km,nslptl+i)=stateold(km,nslptl+i)+dgamma(i)
end do
C----- Increment of current strength in a slip system: DGSLIP
do i=1,nslptl
dgslip(i)=0.
do j=1,nslptl
dgslip(i)=dgslip(i)+h(i,j)*abs(dgamma(j))
end do
end do
C----- Update the current strength in a slip system:
do i=1,nslptl
stateold(km,i)=stateold(km,i)+dgslip(i)
end do
C----- Increment of strain associated with lattice stretching:
delats=0.
do j=1,3
if (j.le.ndir) delats(j)=straininc(km,j)
do i=1,nslptl
delats(j)=delats(j)-slpdef(j,i)*dgamma(i)
end do
end do
do j=1,3
if (j.le.nshr) delats(j+3)=straininc(km,j+ndir)
do i=1,nslptl
delats(j+3)=delats(j+3)-slpdef(j+3,i)*dgamma(i)
end do
end do
C----- Increment of deformation gradient associated with lattice stretching
do j=1,3
do i=1,3
if (i.eq.j) then
dvgrad(i,j)=delats(i)
else
dvgrad(i,j)=delats(i+j+1)
end if
end do
end do
do j=1,3
do i=1,j
if (j.gt.i) then
ij2=i+j-2
if (mod(ij2,2).eq.1) then
term1=1.
else
term1=-1.
end if
do k=1,nslptl
dvgrad(i,j)=dvgrad(i,j)-term1*dgamma(k)*
2 slpspn(ij2,k)
dvgrad(j,i)=dvgrad(j,i)+term1*dgamma(k)*
2 slpspn(ij2,k)
end do
end if
end do
end do
C----- Increment of resolved shear stress in a slip system: DTAUSP
do i=1,nslptl
dtausp(i)=0.
do j=1,6
dtausp(i)=dtausp(i)+ddemsd(j,i)*delats(j)
end do
end do
C----- Update the resolved shear stress in a slip system:
do i=1,nslptl
stateold(km,2*nslptl+i)=stateold(km,2*nslptl+i)
2 +dtausp(i)
end do
C----- Increment of stress: DSTRES
do i=1,ndir+nshr
dstres(i)=-stressold(km,i)*dev
end do
do i=1,ndir
do j=1,ndir
dstres(i)=dstres(i)+d(i,j)*straininc(km,j)
end do
if (nshr.gt.0)then
do j=1,nshr
dstres(i)=dstres(i)+d(i,j+3)*
2 straininc(km,j+ndir)
end do
end if
do j=1,nslptl
dstres(i)=dstres(i)-ddemsd(i,j)*dgamma(j)
end do
end do
if (nshr.gt.0) then
do i=1,nshr
do j=1,ndir
dstres(i+ndir)=dstres(i+ndir)+d(i+3,j)
2 *straininc(km,j)
end do
do j=1,nshr
dstres(i+ndir)=dstres(i+ndir)+d(i+3,j+3)*
2 straininc(km,j+ndir)
end do
do j=1,nslptl
dstres(i+ndir)=dstres(i+ndir)-ddemsd(i+3,j)
2 *dgamma(j)
end do
end do
end if
C----- Update the stress: STRESSOLD
do i=1,ndir+nshr
stressold(km,i)=stressold(km,i)+dstres(i)
end do
C----- Increment of normal to a slip plane and a slip direction
do j=1,nslptl
do i=1,3
dspnor(i,j)=0.
dspdir(i,j)=0.
do k=1,3
dspnor(i,j)=dspnor(i,j)-slpnor(k,j)*dvgrad(k,i)
dspdir(i,j)=dspdir(i,j)+slpdir(k,j)*dvgrad(i,k)
end do
end do
end do
C----- Update the normal to a slip plane and a slip direction
idnor=3*nslptl
iddir=6*nslptl
do j=1,nslptl
do i=1,3
idnor=idnor+1
stateold(km,idnor)=stateold(km,idnor)+dspnor(i,j)
iddir=iddir+1
stateold(km,iddir)=stateold(km,iddir)+dspdir(i,j)
end do
end do
C----- Total cumulative shear strains on all slip systems
do i=1,nslptl
stateold(km,9*nslptl+1)=stateold(km,9*nslptl+1)
2 +abs(dgamma(i))
end do
c----- update stressold to stressnew
do i=1,ndir+nshr
stressnew(km,i)=stressold(km,i)
end do
c----- update stateold to statenew for 1 - nstatev
do i=1,nstatev
statenew(km,i)=stateold(km,i)
end do
if (nshr.gt.1) then
save=straininc(km,5)
straininc(km,5)=straininc(km,6)
straininc(km,6)=save
save=stressnew(km,5)
stressnew(km,5)=stressnew(km,6)
stressnew(km,6)=save
end if
enddo
return
end
c----------------------------------------------------------------------
subroutine ludcmp (a, n, np, indx, d)
include 'vaba_param.inc'
parameter (nmax=200, tiny=1.0e-20)
dimension a(np,np), indx(n), vv(nmax)
d = 1.d0
do i = 1,n
aamax = 0.
do j = 1,n
if (abs(a(i,j)).gt.aamax) aamax = abs(a(i,j))
end do
if (aamax.eq.0.) pause 'singular matrix.'
vv(i) = 1./aamax
end do
do j = 1,n
do i = 1,j-1
sum = a(i,j)
do k = 1,i-1
sum = sum-a(i,k)*a(k,j)
end do
a(i,j) = sum
end do
aamax = 0.
do i = j,n
sum = a(i,j)
do k = 1,j-1
sum = sum-a(i,k)*a(k,j)
end do
a(i,j) = sum
dum = vv(i)*abs(sum)
if (dum.ge.aamax) then
imax = i
aamax = dum
end if
end do
if (j.ne.imax) then
do k = 1,n
dum = a(imax,k)
a(imax,k) = a(j,k)
a(j,k) = dum
end do
d = -d
vv(imax) = vv(j)
end if
indx(j) = imax
if (a(j,j).eq.0.) a(j,j) = tiny
if (j.ne.n) then
dum = 1./a(j,j)
do i = j+1,n
a(i,j) = a(i,j)*dum
end do
end if
end do
return
end
C----------------------------------------------------------------------
subroutine lubksb (a, n, np, indx, b)
include 'vaba_param.inc'
dimension a(np,np), indx(n), b(n)
ii = 0
do i = 1,n
ll = indx(i)
sum = b(ll)
b(ll) = b(i)
if (ii.ne.0) then
do j = ii,i-1
sum = sum-a(i,j)*b(j)
end do
else if (sum.ne.0.) then
ii = i
end if
b(i) = sum
end do
do i = n,1,-1
sum = b(i)
if (i.lt.n) then
do j = i+1,n
sum = sum-a(i,j)*b(j)
end do
end if
b(i) = sum/a(i,i)
end do
return
end
C----------------------------------------------------------------------

6684
JMBBM13b/mag1.inp Normal file

File diff suppressed because it is too large Load diff

6684
JMBBM13b/steel1.inp Normal file

File diff suppressed because it is too large Load diff