-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShapeFunctions.py
More file actions
350 lines (326 loc) · 23.7 KB
/
ShapeFunctions.py
File metadata and controls
350 lines (326 loc) · 23.7 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
import torch
import numpy as np
from numpy.linalg import inv
from numpy.linalg import det
def SHAPEL3D(x, y, z, ELXYZ, nel, ndim, dev):
dN = np.zeros((9, 24))
BG = np.zeros((9, 24))
dNx = (1 / 8) * np.array([-(1 - y) * (1 - z), (1 - y) * (1 - z), (1 + y) * (1 - z), -(1 + y) * (1 - z), \
-(1 - y) * (1 + z), (1 - y) * (1 + z), (1 + y) * (1 + z), -(1 + y) * (1 + z)])
dNy = (1 / 8) * np.array([-(1 - x) * (1 - z), -(1 + x) * (1 - z), (1 + x) * (1 - z), (1 - x) * (1 - z), \
-(1 - x) * (1 + z), -(1 + x) * (1 + z), (1 + x) * (1 + z), (1 - x) * (1 + z)])
dNz = (1 / 8) * np.array([-(1 - x) * (1 - y), -(1 + x) * (1 - y), -(1 + x) * (1 + y), -(1 - x) * (1 + y), \
(1 - x) * (1 - y), (1 + x) * (1 - y), (1 + x) * (1 + y), (1 - x) * (1 + y)])
dNxyz = np.array([
[-(1 - y) * (1 - z) * (1 / 8), (1 / 8) * (1 - y) * (1 - z), (1 / 8) * (1 + y) * (1 - z),
-(1 + y) * (1 - z) * (1 / 8), -(1 - y) * (1 + z) * (1 / 8), (1 - y) * (1 + z) * (1 / 8),
(1 + y) * (1 + z) * (1 / 8), -(1 + y) * (1 + z) * (1 / 8)],
[-(1 - x) * (1 - z) * (1 / 8), -(1 + x) * (1 - z) * (1 / 8), (1 + x) * (1 - z) * (1 / 8),
(1 - x) * (1 - z) * (1 / 8), -(1 - x) * (1 + z) * (1 / 8), -(1 + x) * (1 + z) * (1 / 8),
(1 + x) * (1 + z) * (1 / 8), (1 - x) * (1 + z) * (1 / 8)],
[-(1 - x) * (1 - y) * (1 / 8), -(1 + x) * (1 - y) * (1 / 8), -(1 + x) * (1 + y) * (1 / 8),
-(1 - x) * (1 + y) * (1 / 8), (1 - x) * (1 - y) * (1 / 8), (1 + x) * (1 - y) * (1 / 8),
(1 + x) * (1 + y) * (1 / 8), (1 - x) * (1 + y) * (1 / 8)]
])
# Delta = np.array([
# [-dx, dx, dx, -dx, -dx, dx, dx, -dx],
# [-dy, -dy, dy, dy, -dy, -dy, dy, dy],
# [-dz,-dz,-dz, -dz, dz, dz, dz,dz]
# ])
XI1 = x
XI2 = y
XI3 = z
x1 = ELXYZ[:, 0, 0]
y1 = ELXYZ[:, 0, 1]
z1 = ELXYZ[:, 0, 2]
# --------------
x2 = ELXYZ[:, 1, 0]
y2 = ELXYZ[:, 1, 1]
z2 = ELXYZ[:, 1, 2]
# --------------
x3 = ELXYZ[:, 2, 0]
y3 = ELXYZ[:, 2, 1]
z3 = ELXYZ[:, 2, 2]
# --------------
x4 = ELXYZ[:, 3, 0]
y4 = ELXYZ[:, 3, 1]
z4 = ELXYZ[:, 3, 2]
# --------------
x5 = ELXYZ[:, 4, 0]
y5 = ELXYZ[:, 4, 1]
z5 = ELXYZ[:, 4, 2]
# --------------
x6 = ELXYZ[:, 5, 0]
y6 = ELXYZ[:, 5, 1]
z6 = ELXYZ[:, 5, 2]
# --------------
x7 = ELXYZ[:, 6, 0]
y7 = ELXYZ[:, 6, 1]
z7 = ELXYZ[:, 6, 2]
# --------------
x8 = ELXYZ[:, 7, 0]
y8 = ELXYZ[:, 7, 1]
z8 = ELXYZ[:, 7, 2]
# --------------
#print('ELXYZ',ELXYZ[:,0,0])
size_XI2 = x1.size
# print(size_XI2)
one = 1.0
J = np.array([
[-0.125 * x1 * (one - XI2) * (one - XI3) + 0.125 * x2 * (one - XI2) * (one - XI3) + \
0.125 * x3 * (one + XI2) * (one - XI3) - 0.125 * x4 * (one + XI2) * (one - XI3) - \
0.125 * x5 * (one - XI2) * (one + XI3) + 0.125 * x6 * (one - XI2) * (one + XI3) + \
0.125 * x7 * (one + XI2) * (one + XI3) - \
0.125 * x8 * (one + XI2) * (one + XI3), -0.125 * (one - XI2) * (one - XI3) * y1 + \
0.125 * (one - XI2) * (one - XI3) * y2 + 0.125 * (one + XI2) * (one - XI3) * y3 - \
0.125 * (one + XI2) * (one - XI3) * y4 - 0.125 * (one - XI2) * (one + XI3) * y5 + \
0.125 * (one - XI2) * (one + XI3) * y6 + 0.125 * (one + XI2) * (one + XI3) * y7 - \
0.125 * (one + XI2) * (one + XI3) * y8, -0.125 * (one - XI2) * (one - XI3) * z1 + \
0.125 * (one - XI2) * (one - XI3) * z2 + 0.125 * (one + XI2) * (one - XI3) * z3 - \
0.125 * (one + XI2) * (one - XI3) * z4 - 0.125 * (one - XI2) * (one + XI3) * z5 + \
0.125 * (one - XI2) * (one + XI3) * z6 + 0.125 * (one + XI2) * (one + XI3) * z7 - \
0.125 * (one + XI2) * (one + XI3) * z8],
[-0.125 * x1 * (one - XI1) * (one - XI3) + 0.125 * x4 * (one - XI1) * (one - XI3) - \
0.125 * x2 * (one + XI1) * (one - XI3) + 0.125 * x3 * (one + XI1) * (one - XI3) - \
0.125 * x5 * (one - XI1) * (one + XI3) + 0.125 * x8 * (one - XI1) * (one + XI3) - \
0.125 * x6 * (one + XI1) * (one + XI3) + \
0.125 * x7 * (one + XI1) * (one + XI3), -0.125 * (one - XI1) * (one - XI3) * y1 - \
0.125 * (one + XI1) * (one - XI3) * y2 + 0.125 * (one + XI1) * (one - XI3) * y3 + \
0.125 * (one - XI1) * (one - XI3) * y4 - 0.125 * (one - XI1) * (one + XI3) * y5 - \
0.125 * (one + XI1) * (one + XI3) * y6 + 0.125 * (one + XI1) * (one + XI3) * y7 + \
0.125 * (one - XI1) * (one + XI3) * y8, -0.125 * (one - XI1) * (one - XI3) * z1 - \
0.125 * (one + XI1) * (one - XI3) * z2 + 0.125 * (one + XI1) * (one - XI3) * z3 + \
0.125 * (one - XI1) * (one - XI3) * z4 - 0.125 * (one - XI1) * (one + XI3) * z5 - \
0.125 * (one + XI1) * (one + XI3) * z6 + 0.125 * (one + XI1) * (one + XI3) * z7 + \
0.125 * (one - XI1) * (one + XI3) * z8],
[-0.125 * x1 * (one - XI1) * (one - XI2) + 0.125 * x5 * (one - XI1) * (one - XI2) - \
0.125 * x2 * (one + XI1) * (one - XI2) + 0.125 * x6 * (one + XI1) * (one - XI2) - \
0.125 * x4 * (one - XI1) * (one + XI2) + 0.125 * x8 * (one - XI1) * (one + XI2) - \
0.125 * x3 * (one + XI1) * (one + XI2) + \
0.125 * x7 * (one + XI1) * (one + XI2), -0.125 * (one - XI1) * (one - XI2) * y1 - \
0.125 * (one + XI1) * (one - XI2) * y2 - 0.125 * (one + XI1) * (one + XI2) * y3 - \
0.125 * (one - XI1) * (one + XI2) * y4 + 0.125 * (one - XI1) * (one - XI2) * y5 + \
0.125 * (one + XI1) * (one - XI2) * y6 + 0.125 * (one + XI1) * (one + XI2) * y7 + \
0.125 * (one - XI1) * (one + XI2) * y8, -0.125 * (one - XI1) * (one - XI2) * z1 - \
0.125 * (one + XI1) * (one - XI2) * z2 - 0.125 * (one + XI1) * (one + XI2) * z3 - \
0.125 * (one - XI1) * (one + XI2) * z4 + 0.125 * (one - XI1) * (one - XI2) * z5 + \
0.125 * (one + XI1) * (one - XI2) * z6 + 0.125 * (one + XI1) * (one + XI2) * z7 + \
0.125 * (one - XI1) * (one + XI2) * z8]
])
# if ctr==0:
# print(ctr)
# print(J)
J1 = -0.125 * x1 * (one - XI2) * (one - XI3) + 0.125 * x2 * (one - XI2) * (one - XI3) + \
0.125 * x3 * (one + XI2) * (one - XI3) - 0.125 * x4 * (one + XI2) * (one - XI3) - \
0.125 * x5 * (one - XI2) * (one + XI3) + 0.125 * x6 * (one - XI2) * (one + XI3) + \
0.125 * x7 * (one + XI2) * (one + XI3) - \
0.125 * x8 * (one + XI2) * (one + XI3), -0.125 * (one - XI2) * (one - XI3) * y1 + \
0.125 * (one - XI2) * (one - XI3) * y2 + 0.125 * (one + XI2) * (one - XI3) * y3 - \
0.125 * (one + XI2) * (one - XI3) * y4 - 0.125 * (one - XI2) * (one + XI3) * y5 + \
0.125 * (one - XI2) * (one + XI3) * y6 + 0.125 * (one + XI2) * (one + XI3) * y7 - \
0.125 * (one + XI2) * (one + XI3) * y8, -0.125 * (one - XI2) * (one - XI3) * z1 + \
0.125 * (one - XI2) * (one - XI3) * z2 + 0.125 * (one + XI2) * (one - XI3) * z3 - \
0.125 * (one + XI2) * (one - XI3) * z4 - 0.125 * (one - XI2) * (one + XI3) * z5 + \
0.125 * (one - XI2) * (one + XI3) * z6 + 0.125 * (one + XI2) * (one + XI3) * z7 - \
0.125 * (one + XI2) * (one + XI3) * z8
J2 = -0.125 * x1 * (one - XI1) * (one - XI3) + 0.125 * x4 * (one - XI1) * (one - XI3) - \
0.125 * x2 * (one + XI1) * (one - XI3) + 0.125 * x3 * (one + XI1) * (one - XI3) - \
0.125 * x5 * (one - XI1) * (one + XI3) + 0.125 * x8 * (one - XI1) * (one + XI3) - \
0.125 * x6 * (one + XI1) * (one + XI3) + \
0.125 * x7 * (one + XI1) * (one + XI3), -0.125 * (one - XI1) * (one - XI3) * y1 - \
0.125 * (one + XI1) * (one - XI3) * y2 + 0.125 * (one + XI1) * (one - XI3) * y3 + \
0.125 * (one - XI1) * (one - XI3) * y4 - 0.125 * (one - XI1) * (one + XI3) * y5 - \
0.125 * (one + XI1) * (one + XI3) * y6 + 0.125 * (one + XI1) * (one + XI3) * y7 + \
0.125 * (one - XI1) * (one + XI3) * y8, -0.125 * (one - XI1) * (one - XI3) * z1 - \
0.125 * (one + XI1) * (one - XI3) * z2 + 0.125 * (one + XI1) * (one - XI3) * z3 + \
0.125 * (one - XI1) * (one - XI3) * z4 - 0.125 * (one - XI1) * (one + XI3) * z5 - \
0.125 * (one + XI1) * (one + XI3) * z6 + 0.125 * (one + XI1) * (one + XI3) * z7 + \
0.125 * (one - XI1) * (one + XI3) * z8
J3 = -0.125 * x1 * (one - XI1) * (one - XI2) + 0.125 * x5 * (one - XI1) * (one - XI2) - \
0.125 * x2 * (one + XI1) * (one - XI2) + 0.125 * x6 * (one + XI1) * (one - XI2) - \
0.125 * x4 * (one - XI1) * (one + XI2) + 0.125 * x8 * (one - XI1) * (one + XI2) - \
0.125 * x3 * (one + XI1) * (one + XI2) + \
0.125 * x7 * (one + XI1) * (one + XI2), -0.125 * (one - XI1) * (one - XI2) * y1 - \
0.125 * (one + XI1) * (one - XI2) * y2 - 0.125 * (one + XI1) * (one + XI2) * y3 - \
0.125 * (one - XI1) * (one + XI2) * y4 + 0.125 * (one - XI1) * (one - XI2) * y5 + \
0.125 * (one + XI1) * (one - XI2) * y6 + 0.125 * (one + XI1) * (one + XI2) * y7 + \
0.125 * (one - XI1) * (one + XI2) * y8, -0.125 * (one - XI1) * (one - XI2) * z1 - \
0.125 * (one + XI1) * (one - XI2) * z2 - 0.125 * (one + XI1) * (one + XI2) * z3 - \
0.125 * (one - XI1) * (one + XI2) * z4 + 0.125 * (one - XI1) * (one - XI2) * z5 + \
0.125 * (one + XI1) * (one - XI2) * z6 + 0.125 * (one + XI1) * (one + XI2) * z7 + \
0.125 * (one - XI1) * (one + XI2) * z8
J = np.c_[J1, J2, J3]
J = np.ravel(J)
J = np.reshape(J, (nel, ndim, ndim), order='F')
# np.array([J1][J2],[J3])
JINV = inv(J)
# print(JINV)
DET = det(J)
# print(DET)
# G = np.array([
# [JINV[0,0], JINV[0,1] , JINV[0,2], 0, 0, 0, 0, 0, 0],
# [JINV[1,0], JINV[1,1], JINV[1,2], 0, 0, 0, 0, 0, 0],
# [JINV[2,0], JINV[2,1], JINV[2,2], 0, 0, 0, 0, 0, 0],
# [0, 0, 0, JINV[0,0], JINV[0,1], JINV[0,2], 0, 0, 0],
# [0, 0, 0, JINV[1,0], JINV[1,1], JINV[1,2], 0, 0, 0],
# [0, 0, 0, JINV[2,0], JINV[2,1], JINV[2,2], 0, 0, 0],
# [0, 0, 0, 0, 0, 0, JINV[0,0], JINV[0,1], JINV[0,2]],
# [0, 0, 0, 0, 0, 0, JINV[1,0], JINV[1,1], JINV[1,2]],
# [0, 0, 0, 0, 0, 0, JINV[2,0], JINV[2,1], JINV[2,2]]
# ])
GDSF = JINV @ dNxyz
# print(GDSF)
dN[0, 0:24:3] = dNx
dN[1, 0:24:3] = dNy
dN[2, 0:24:3] = dNz
dN[3, 1:24:3] = dNx
dN[4, 1:24:3] = dNy
dN[5, 1:24:3] = dNz
dN[6, 2:24:3] = dNx
dN[7, 2:24:3] = dNy
dN[8, 2:24:3] = dNz
BG_1 = np.c_[
GDSF[:, 0, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 1], np.zeros(size_XI2), np.zeros(size_XI2), \
GDSF[:, 0, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 3], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 0, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 5], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 0, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 7], np.zeros(size_XI2), np.zeros(
size_XI2)]
BG_2 = np.c_[
GDSF[:, 1, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 1], np.zeros(size_XI2), np.zeros(size_XI2), \
GDSF[:, 1, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 3], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 1, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 5], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 1, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 7], np.zeros(size_XI2), np.zeros(
size_XI2)]
BG_3 = np.c_[
GDSF[:, 2, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 1], np.zeros(size_XI2), np.zeros(size_XI2), \
GDSF[:, 2, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 3], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 2, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 5], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 2, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 7], np.zeros(size_XI2), np.zeros(
size_XI2)]
BG_4 = np.c_[
np.zeros(size_XI2), GDSF[:, 0, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 1], np.zeros(size_XI2), \
np.zeros(size_XI2), GDSF[:, 0, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 3], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 0, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 5], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 0, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 7], np.zeros(
size_XI2)]
BG_5 = np.c_[
np.zeros(size_XI2), GDSF[:, 1, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 1], np.zeros(size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 3], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 5], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 7], np.zeros(
size_XI2)]
BG_6 = np.c_[
np.zeros(size_XI2), GDSF[:, 2, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 1], np.zeros(size_XI2), \
np.zeros(size_XI2), GDSF[:, 2, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 3], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 2, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 5], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 2, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 7], np.zeros(
size_XI2)]
BG_7 = np.c_[
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 1],
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 3], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0,
5], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0,
7]]
BG_8 = np.c_[
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 1],
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 3], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1,
5], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1,
7]]
BG_9 = np.c_[
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 1],
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 3], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2,
5], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2,
7]]
#### ====== BN matrix ========================
# BN_1 = np.c_[F11*GDSF[:,0,0], F21*GDSF[:,0,0], F31*GDSF[:,0,0], F11*GDSF[:,0,1], F21*GDSF[:,0,1], F31*GDSF[:,0,1],\
# F11*GDSF[:,0,2], F21*GDSF[:,0,2], F31*GDSF[:,0,2], F11*GDSF[:,0,3], F21*GDSF[:,0,3], F31*GDSF[:,0,3],\
# F11*GDSF[:,0,4], F21*GDSF[:,0,4], F31*GDSF[:,0,4], F11*GDSF[:,0,5], F21*GDSF[:,0,5], F31*GDSF[:,0,5],\
# F11*GDSF[:,0,6], F21*GDSF[:,0,6], F31*GDSF[:,0,6], F11*GDSF[:,0,7], F21*GDSF[:,0,7], F31*GDSF[:,0,7]]
# BN_2 = np.c_[F12*GDSF[:,1,0], F22*GDSF[:,1,0], F32*GDSF[:,1,0], F12*GDSF[:,1,1], F22*GDSF[:,1,1], F32*GDSF[:,1,1],\
# F12*GDSF[:,1,2], F22*GDSF[:,1,2], F32*GDSF[:,1,2], F12*GDSF[:,1,3], F22*GDSF[:,1,3], F32*GDSF[:,1,3],\
# F12*GDSF[:,1,4], F22*GDSF[:,1,4], F32*GDSF[:,1,4], F12*GDSF[:,1,5], F22*GDSF[:,1,5], F32*GDSF[:,1,5],\
# F12*GDSF[:,1,6], F22*GDSF[:,1,6], F32*GDSF[:,1,6], F12*GDSF[:,1,7], F22*GDSF[:,1,7], F32*GDSF[:,1,7]]
# BN_3 = np.c_[F13*GDSF[:,2,0], F23*GDSF[:,2,0], F33*GDSF[:,2,0], F13*GDSF[:,2,1], F23*GDSF[:,2,1], F33*GDSF[:,2,1],\
# F13*GDSF[:,2,2], F23*GDSF[:,2,2], F33*GDSF[:,2,2], F13*GDSF[:,2,3], F23*GDSF[:,2,3], F33*GDSF[:,2,3],\
# F13*GDSF[:,2,4], F23*GDSF[:,2,4], F33*GDSF[:,2,4], F13*GDSF[:,2,5], F23*GDSF[:,2,5], F33*GDSF[:,2,5],\
# F13*GDSF[:,2,6], F23*GDSF[:,2,6], F33*GDSF[:,2,6], F13*GDSF[:,2,7], F23*GDSF[:,2,7], F33*GDSF[:,2,7]]
# BN_4 = np.c_[F12*GDSF[:,0,0]+ F11*GDSF[:,1,0], F22*GDSF[:,0,0]+ F21*GDSF[:,1,0], F32*GDSF[:,0,0] + F31*GDSF[:,1,0], F12*GDSF[:,0,1]+ F11*GDSF[:,1,1], F22*GDSF[:,0,1]+ F21*GDSF[:,1,1], F32*GDSF[:,0,1] + F31*GDSF[:,1,1],\
# F12*GDSF[:,0,2]+ F11*GDSF[:,1,2], F22*GDSF[:,0,2]+ F21*GDSF[:,1,2], F32*GDSF[:,0,2] + F31*GDSF[:,1,2], F12*GDSF[:,0,3]+ F11*GDSF[:,1,3], F22*GDSF[:,0,3]+ F21*GDSF[:,1,3], F32*GDSF[:,0,3] + F31*GDSF[:,1,3],\
# F12*GDSF[:,0,4]+ F11*GDSF[:,1,4], F22*GDSF[:,0,4]+ F21*GDSF[:,1,4], F32*GDSF[:,0,4] + F31*GDSF[:,1,4], F12*GDSF[:,0,5]+ F11*GDSF[:,1,5], F22*GDSF[:,0,5]+ F21*GDSF[:,1,5], F32*GDSF[:,0,5] + F31*GDSF[:,1,5],\
# F12*GDSF[:,0,6]+ F11*GDSF[:,1,6], F22*GDSF[:,0,6]+ F21*GDSF[:,1,6], F32*GDSF[:,0,6] + F31*GDSF[:,1,6], F12*GDSF[:,0,7]+ F11*GDSF[:,1,7], F22*GDSF[:,0,7]+ F21*GDSF[:,1,7], F32*GDSF[:,0,7] + F31*GDSF[:,1,7]]
# BN_5 = np.c_[F13*GDSF[:,1,0]+ F12*GDSF[:,2,0], F23*GDSF[:,1,0]+ F22*GDSF[:,2,0], F33*GDSF[:,1,0] + F32*GDSF[:,2,0], F13*GDSF[:,1,1]+ F12*GDSF[:,2,1], F23*GDSF[:,1,1]+ F22*GDSF[:,2,1], F33*GDSF[:,1,1] + F32*GDSF[:,2,1],\
# F13*GDSF[:,1,2]+ F12*GDSF[:,2,2], F23*GDSF[:,1,2]+ F22*GDSF[:,2,2], F33*GDSF[:,1,2] + F32*GDSF[:,2,2], F13*GDSF[:,1,3]+ F12*GDSF[:,2,3], F23*GDSF[:,1,3]+ F22*GDSF[:,2,3], F33*GDSF[:,1,3] + F32*GDSF[:,2,3],\
# F13*GDSF[:,1,4]+ F12*GDSF[:,2,4], F23*GDSF[:,1,4]+ F22*GDSF[:,2,4], F33*GDSF[:,1,4] + F32*GDSF[:,2,4], F13*GDSF[:,1,5]+ F12*GDSF[:,2,5], F23*GDSF[:,1,5]+ F22*GDSF[:,2,5], F33*GDSF[:,1,5] + F32*GDSF[:,2,5],\
# F13*GDSF[:,1,6]+ F12*GDSF[:,2,6], F23*GDSF[:,1,6]+ F22*GDSF[:,2,6], F33*GDSF[:,1,6] + F32*GDSF[:,2,6], F13*GDSF[:,1,7]+ F12*GDSF[:,2,7], F23*GDSF[:,1,7]+ F22*GDSF[:,2,7], F33*GDSF[:,1,7] + F32*GDSF[:,2,7]]
# BN_6 = np.c_[F13*GDSF[:,0,0]+ F11*GDSF[:,2,0], F23*GDSF[:,1,0]+ F21*GDSF[:,2,0], F33*GDSF[:,0,0] + F31*GDSF[:,2,0], F13*GDSF[:,0,1]+ F11*GDSF[:,2,1], F23*GDSF[:,1,1]+ F21*GDSF[:,2,1], F33*GDSF[:,0,1] + F31*GDSF[:,2,1],\
# F13*GDSF[:,0,2]+ F11*GDSF[:,2,2], F23*GDSF[:,1,2]+ F21*GDSF[:,2,2], F33*GDSF[:,0,2] + F31*GDSF[:,2,2], F13*GDSF[:,0,3]+ F11*GDSF[:,2,3], F23*GDSF[:,1,3]+ F21*GDSF[:,2,3], F33*GDSF[:,0,3] + F31*GDSF[:,2,3],\
# F13*GDSF[:,0,4]+ F11*GDSF[:,2,4], F23*GDSF[:,1,4]+ F21*GDSF[:,2,4], F33*GDSF[:,0,4] + F31*GDSF[:,2,4], F13*GDSF[:,0,5]+ F11*GDSF[:,2,5], F23*GDSF[:,1,5]+ F21*GDSF[:,2,5], F33*GDSF[:,0,5] + F31*GDSF[:,2,5],\
# F13*GDSF[:,0,6]+ F11*GDSF[:,2,6], F23*GDSF[:,1,6]+ F21*GDSF[:,2,6], F33*GDSF[:,0,6] + F31*GDSF[:,2,6], F13*GDSF[:,0,7]+ F11*GDSF[:,2,7], F23*GDSF[:,1,7]+ F21*GDSF[:,2,7], F33*GDSF[:,0,7] + F31*GDSF[:,2,7]]
# BN = np.stack((BN_1,BN_2,BN_3,BN_4,BN_5,BN_6),1)
# print('BG_1',BG_1)
####===================================================================
B_1 = np.c_[
GDSF[:, 0, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 1], np.zeros(size_XI2), np.zeros(size_XI2), \
GDSF[:, 0, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 3], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 0, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 5], np.zeros(size_XI2), np.zeros(
size_XI2), \
GDSF[:, 0, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 0, 7], np.zeros(size_XI2), np.zeros(
size_XI2)]
B_2 = np.c_[
np.zeros(size_XI2), GDSF[:, 1, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 1], np.zeros(size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 3], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 5], np.zeros(
size_XI2), \
np.zeros(size_XI2), GDSF[:, 1, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 1, 7], np.zeros(
size_XI2)]
B_3 = np.c_[
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 0], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 1], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 2], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2,
3], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 4], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2,
5], \
np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2, 6], np.zeros(size_XI2), np.zeros(size_XI2), GDSF[:, 2,
7]]
B_4 = np.c_[GDSF[:, 1, 0], GDSF[:, 0, 0], np.zeros(size_XI2), GDSF[:, 1, 1], GDSF[:, 0, 1], np.zeros(size_XI2), \
GDSF[:, 1, 2], GDSF[:, 0, 2], np.zeros(size_XI2), GDSF[:, 1, 3], GDSF[:, 0, 3], np.zeros(size_XI2), \
GDSF[:, 1, 4], GDSF[:, 0, 4], np.zeros(size_XI2), GDSF[:, 1, 5], GDSF[:, 0, 5], np.zeros(size_XI2), \
GDSF[:, 1, 6], GDSF[:, 0, 6], np.zeros(size_XI2), GDSF[:, 1, 7], GDSF[:, 0, 7], np.zeros(size_XI2)]
B_5 = np.c_[np.zeros(size_XI2), GDSF[:, 2, 0], GDSF[:, 1, 0], np.zeros(size_XI2), GDSF[:, 2, 1], GDSF[:, 1, 1], \
np.zeros(size_XI2), GDSF[:, 2, 2], GDSF[:, 1, 2], np.zeros(size_XI2), GDSF[:, 2, 3], GDSF[:, 1, 3], \
np.zeros(size_XI2), GDSF[:, 2, 4], GDSF[:, 1, 4], np.zeros(size_XI2), GDSF[:, 2, 5], GDSF[:, 1, 5], \
np.zeros(size_XI2), GDSF[:, 2, 6], GDSF[:, 1, 6], np.zeros(size_XI2), GDSF[:, 2, 7], GDSF[:, 1, 7]]
B_6 = np.c_[GDSF[:, 2, 0], np.zeros(size_XI2), GDSF[:, 0, 0], GDSF[:, 2, 1], np.zeros(size_XI2), GDSF[:, 0, 1], \
GDSF[:, 2, 2], np.zeros(size_XI2), GDSF[:, 0, 2], GDSF[:, 2, 3], np.zeros(size_XI2), GDSF[:, 0, 3], \
GDSF[:, 2, 4], np.zeros(size_XI2), GDSF[:, 0, 4], GDSF[:, 2, 5], np.zeros(size_XI2), GDSF[:, 0, 5], \
GDSF[:, 2, 6], np.zeros(size_XI2), GDSF[:, 0, 6], GDSF[:, 2, 7], np.zeros(size_XI2), GDSF[:, 0, 7]]
BG = np.stack((BG_1, BG_2, BG_3, BG_4, BG_5, BG_6, BG_7, BG_8, BG_9), 1)
B = np.stack((B_1, B_2, B_3, B_4, B_5, B_6), 1)
# print('BG',BG)
# BG = np.ravel(BG)
# BG = np.reshape(BG,(nelx*nely*nelz,9,24), order = 'F')
# print(BG)
GDSF = torch.tensor(GDSF, device=dev).float()
BG = torch.tensor(BG, device=dev).float()
B = torch.tensor(B, device=dev).float()
DET = torch.tensor(DET, device=dev).float()
dN = torch.tensor(dN, device=dev).float()
return dN, BG, B, GDSF, DET