37
38
39
40 USE elbufdef_mod
43 use element_mod , only : nixtg
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "param_c.inc"
52#include "com01_c.inc"
53#include "com04_c.inc"
54#include "scr03_c.inc"
55
56
57
58 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
59 TYPE (NLOCAL_STR_) , TARGET :: NLOC_DMG
60 INTEGER IXTG(NIXTG,*),NFT,NEL,NG,IPM(NPROPMI,*)
61 my_real ,
DIMENSION(NUMELC+NUMELTG),
INTENT(IN)
64 . x(3,*),xreftg(3,3,*),dt_nl,bufmat(*),time
65 LOGICAL :: FAILURE
66
67
68
69 INTEGER :: IMAT,NDOF,L_NLOC,N1,N2,N3,
70 . K,I,NPTR,NPTS,IR,IS,NDNOD
71 INTEGER, DIMENSION(NEL) :: POS1,POS2,POS3
73 . le_min,len,damp,dens,ntn_unl,ntn_vnl,
74 . ntvar,z01(11,11),wf1(11,11),zn1(12,11),b1,b2,b3,
75 . nth1,nth2,bth1,bth2,k1,k12,k2,sspnl,le_max
76 my_real,
DIMENSION(:,:),
ALLOCATABLE :: var_reg,vpred
78 . DIMENSION(:), POINTER :: fnl,unl,vnl,dnl,mnl,thck
79 my_real,
DIMENSION(NEL) :: x1,x2,x3,y1,y2,y3,
80 . px1,py1,px2,py2,e1x,e2x,e3x,e1y,e2y,e3y,e1z,e2z,e3z,
81 . x2l,y2l,x3l,y3l,z1,z2,z3,surf,offg,
82 . vols,btb11,btb12,btb13,btb22,btb23,btb33
83 TYPE(BUF_NLOC_),POINTER :: BUFNL
84 my_real,
DIMENSION(:,:),
POINTER ::
85 . massth,fnlth,vnlth,unlth
86
87 DATA z01/
88 1 0. ,0. ,0. ,0. ,0. ,
89 1 0. ,0. ,0. ,0. ,0. ,0. ,
90 2 -.5 ,0.5 ,0. ,0. ,0. ,
91 2 0. ,0. ,0. ,0. ,0. ,0. ,
92 3 -.5 ,0. ,0.5 ,0. ,0. ,
93 3 0. ,0. ,0. ,0. ,0. ,0. ,
94 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
95 4 0. ,0. ,0. ,0. ,0. ,0. ,
96 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
97 5 0. ,0. ,0. ,0. ,0. ,0. ,
98 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
99 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
100 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
101 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
102 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
103 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
104 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
105 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
106 a -.5 ,-.3888889,-.2777778,-.1666667,-.0555555,
107 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
108 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
109 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
110
111 DATA wf1/
112 1 1. ,0. ,0. ,0. ,0. ,
113 1 0. ,0. ,0. ,0. ,0. ,0. ,
114 2 0.5 ,0.5 ,0. ,0. ,0. ,
115 2 0. ,0. ,0. ,0. ,0. ,0. ,
116 3 0.25 ,0.5 ,0.25 ,0. ,0. ,
117 3 0. ,0. ,0. ,0. ,0. ,0. ,
118 4 0.1666667,0.3333333,0.3333333,0.1666667,0. ,
119 4 0. ,0. ,0. ,0. ,0. ,0. ,
120 5 0.125 ,0.25 ,0.25 ,0.25 ,0.125 ,
121 5 0. ,0. ,0. ,0. ,0. ,0. ,
122 6 0.1 ,0.2 ,0.2 ,0.2 ,0.2 ,
123 6 0.1 ,0. ,0. ,0. ,0. ,0. ,
124 7 0.0833333,0.1666667,0.1666667,0.1666667,0.1666667,
125 7 0.1666667,0.0833333,0. ,0. ,0. ,0. ,
126 8 0.0714286,0.1428571,0.1428571,0.1428571,0.1428571,
127 8 0.1428571,0.1428571,0.0714286,0. ,0. ,0. ,
128 9 0.0625 ,0.125 ,0.125 ,0.125 ,0.125 ,
129 9 0.125 ,0.125 ,0.125 ,0.0625 ,0. ,0. ,
130 a 0.0555556,0.1111111,0.1111111,0.1111111,0.1111111,
131 a 0.1111111,0.1111111,0.1111111,0.1111111,0.0555556,0. ,
132 b 0.05 ,0.1 ,0.1 ,0.1 ,0.1 ,
133 b 0.1 ,0.1 ,0.1 ,0.1 ,0.1 ,0.05 /
134
135 DATA zn1/
136 1 0. ,0. ,0. ,0. ,0. ,0. ,
137 1 0. ,0. ,0. ,0.
138 2 -.5 ,0.5 ,0. ,0. ,0. ,0. ,
139 2 0. ,0. ,0. ,0. ,0. ,0. ,
140 3 -.5 ,-.25 ,0.25 ,0.5 ,0. ,0. ,
141 3 0. ,0. ,0. ,0. ,0. ,0.
142 4 -.5 ,-.3333333,0. ,0.3333333,0.5 ,0. ,
143 4 0. ,0.
144 5 -.5 ,-.375 ,-0.125 ,0.125 ,0.375 ,0.5 ,
145 5 0. ,0. ,0. ,0. ,0. ,0. ,
146 6 -.5 ,-.4 ,-.2 ,0.0 ,0.2 ,0.4 ,
147 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
148 7 -.5 ,-.4166667,-.25 ,-.0833333,0.0833333,0.25 ,
149 7 0.4166667,0.5 ,0. ,0. ,0. ,0. ,
150 8 -.5 ,-.4285715,-.2857143,-.1428572,0.0 ,0.1428572,
151 8 0.2857143,0.4285715,0.5 ,0. ,0. ,0. ,
152 9 -.5 ,-.4375 ,-.3125 ,-.1875 ,-.0625 ,0.0625 ,
153 9 0.1875 ,0.3125 ,0.4375 ,0.5 ,0. ,0. ,
154 a -.5 ,-.4444444,-.3333333,-.2222222,-.1111111,0. ,
155 a 0.1111111,0.2222222,0.3333333,0.4444444,0.5 ,0. ,
156 b -.5 ,-.45 ,-.35 ,-.25 ,-.15 ,-.05 ,
157 b 0.05 ,0.15 ,0.25 ,0.35 ,0.45 ,0.5 /
158
159
160 l_nloc = nloc_dmg%L_NLOC
161
162 fnl => nloc_dmg%FNL(1:l_nloc,1)
163 vnl => nloc_dmg%VNL(1:l_nloc)
164 dnl => nloc_dmg%DNL(1:l_nloc)
165 unl => nloc_dmg%UNL(1:l_nloc)
166 mnl => nloc_dmg%MASS(1:l_nloc)
167
168 imat = ixtg(1,1+nft)
169
170 le_min = sqrt((four/sqrt(three))*minval(
area(numelc+nft+1:numelc+nft+nel)))
171
172 ndof = elbuf_tab(ng)%BUFLY(1)%NPTT
173
174 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
175
176 IF (ndof>1) THEN
177 le_min =
min(le_min,minval(thck(1:nel))/ndof)
178 ENDIF
179
180 len = nloc_dmg%LEN(imat)
181
182 le_max = nloc_dmg%LE_MAX(imat)
183
184 damp = nloc_dmg%DAMP(imat)
185
186 dens = nloc_dmg%DENS(imat)
187
188 sspnl = nloc_dmg%SSPNL(imat)
189
190 dt_nl =
min(dt_nl,0.5d0*((two*
min(le_min,le_max)*sqrt(three*dens))/
191 . (sqrt(twelve*(len**2)+(
min(le_min,le_max)**2)))))
192
193 IF (ndof>1) THEN
194 IF (ndof > 2) THEN
195 ALLOCATE(vpred(nel,ndof+1))
196 ndnod = ndof+1
197 ELSE
198 ALLOCATE(vpred(nel,ndof))
199 ndnod = ndof
200 ENDIF
201 ENDIF
202
203 nptr = elbuf_tab(ng)%NPTR
204 npts = elbuf_tab(ng)%NPTS
205
206 IF (.NOT.ALLOCATED(var_reg)) ALLOCATE(var_reg(nel,ndof))
207
208
209# include "vectorize.inc"
210 DO i = 1,nel
211
212 IF (nxref == 0) THEN
213 x1(i)=x(1,ixtg(2,nft+i))
214 y1(i)=x(2,ixtg(2,nft+i))
215 z1(i)=x(3,ixtg(2,nft+i))
216 x2(i)=x(1,ixtg(3,nft+i))
217 y2(i)=x(2,ixtg(3,nft+i))
218 z2(i)=x(3,ixtg(3,nft+i))
219 x3(i)=x(1,ixtg(4,nft+i))
220 y3(i)=x(2,ixtg(4,nft+i))
221 z3(i)=x(3,ixtg(4,nft+i))
222 ELSE
223 x1(i)=xreftg(1,1,nft+i)
224 y1(i)=xreftg(1,2,nft+i)
225 z1(i)=xreftg(1,3,nft+i)
226 x2(i)=xreftg(2,1,nft+i)
227 y2(i)=xreftg(2,2,nft+i)
228 z2(i)=xreftg(2,3,nft+i)
229 x3(i)=xreftg(3,1,nft+i)
230 y3(i)=xreftg(3,2,nft+i)
231 z3(i)=xreftg(3,3,nft+i)
232 ENDIF
233
234
235 n1 = nloc_dmg%IDXI(ixtg(2,nft+i))
236 n2 = nloc_dmg%IDXI(ixtg(3,nft+i))
237 n3 = nloc_dmg%IDXI(ixtg(4,nft+i))
238
239 pos1(i) = nloc_dmg%POSI(n1)
240 pos2(i) = nloc_dmg%POSI(n2)
241 pos3(i) = nloc_dmg%POSI(n3)
242 ENDDO
243
244
245 DO k = 1,ndof
246
247# include "vectorize.inc"
248 DO i = 1,nel
249 var_reg(i,k) = third*(dnl(pos1(i)+k-1)
250 . + dnl(pos2(i)+k-1)
251 . + dnl(pos3(i)+k-1))
252 ENDDO
253 ENDDO
254
256 . x1 ,x2 ,x3 ,y1 ,y2 ,
257 . y3 ,z1 ,z2 ,z3 ,
258 . e1x ,e2x ,e3x ,e1y ,e2y ,e3y ,
259 . e1z ,e2z ,e3z )
260
261
263 . bufmat ,time ,var_reg ,
264 . failure )
265
266
267
268
269
270# include "vectorize.inc"
271 DO i=1,nel
272
273
274 x2l(i) = e1x(i)*(x2(i)-x1(i))+e1y(i)*(y2(i)-y1(i))+e1z(i)*(z2(i)-z1(i))
275 y2l(i) = e2x(i)*(x2(i)-x1(i))+e2y(i)*(y2(i)-y1(i))+e2z(i)*(z2(i)-z1(i))
276 y3l(i) = e2x(i)*(x3(i)-x1(i))+e2y(i)*(y3(i)-y1(i))+e2z(i)*(z3(i)-z1(i))
277 x3l(i) = e1x(i)*(x3(i)-x1(i))+e1y(i)*(y3(i)-y1(i))+e1z(i)*(z3(i)-z1(i))
278
279
280 px1(i) = (y2l(i)-y3l(i))*(half/surf(i))
281 py1(i) = (x3l(i)-x2l(i))*(half/surf(i))
282 px2(i) = y3l(i)*(half/surf(i))
283 py2(i) = -x3l(i)*(half/surf(i))
284
285
286 btb11(i) = px1(i)**2 + py1(i)**2
287 btb12(i) = -px1(i)**2 + py1(i)*py2(i)
288 btb13(i) = -py1(i)*(py1(i)+py2(i))
289 btb22(i) = px1(i)**2 + py2(i)**2
290 btb23(i) = -py2(i)*(py1(i)+py2(i))
291 btb33(i) = (py1(i)+py2(i))**2
292
293
294 vols(i) =
area(numelc+nft+i)*thck(i)
295
296
297 offg(i) = elbuf_tab(ng)%GBUF%OFF(i)
298 ENDDO
299
300
301
302
303
304 IF ((ndof > 1).AND.(len>zero)) THEN
305
306
307 bufnl => elbuf_tab(ng)%NLOC(1,1)
308
309
310 massth => bufnl%MASSTH(1:nel,1:ndnod)
311 unlth => bufnl%UNLTH(1:nel ,1:ndnod)
312 vnlth => bufnl%VNLTH(1:nel ,1:ndnod)
313 fnlth => bufnl%FNLTH(1:nel ,1:ndnod)
314
315 DO k = 1,ndnod
316 DO i = 1,nel
317
318 vpred(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*(dt_nl/two
319 ENDDO
320 ENDDO
321 DO k = 1,ndnod
322 DO i = 1,nel
323
324 fnlth(i,k) = zero
325 ENDDO
326 ENDDO
327
328
329 DO k = 1, ndof
330
331
332 IF ((ndof==2).AND.(k==2)) THEN
333 nth1 = (z01(k,ndof) - zn1(k,ndof))/(zn1(k-1,ndof) - zn1(k,ndof))
334 nth2 = (z01(k,ndof) - zn1(k-1,ndof)) /(zn1(k,ndof) - zn1(k-1,ndof))
335 ELSE
336 nth1 = (z01(k,ndof) - zn1(k+1,ndof))/(zn1(k,ndof) - zn1(k+1,ndof))
337 nth2 = (z01(k,ndof) - zn1(k,ndof)) /(zn1(k+1,ndof) - zn1(k,ndof))
338 ENDIF
339
340
341 DO i = 1,nel
342
343 IF ((ndof==2).AND.(k==2)) THEN
344 bth1 = (one/(zn1(k-1,ndof) - zn1(k,ndof)))*(one/thck(i))
345 bth2 = (one/(zn1(k,ndof) - zn1(k-1,ndof)))*(one/thck(i))
346 ELSE
347 bth1 = (one/(zn1(k
348 bth2 = (one/(zn1(k+1,ndof) - zn1(k,ndof)))*(one/thck(i))
349 ENDIF
350
351
352 k1 = (len**2)*(bth1**2) + nth1**2
353 k12 = (len**2)*(bth1*bth2)+ (nth1*nth2)
354 k2 = (len**2)*(bth2**2) + nth2**2
355
356 ! computation of
the non-local forces
357 IF ((ndof==2).AND.(k==2)) THEN
358 fnlth(i,k-1) = fnlth(i,k-1) + (k1*unlth(i,k-1) + k12*unlth(i,k)
359 . + damp*((nth1**2)*vpred(i,k-1)
360 . + (nth1*nth2)*vpred
361 . - (nth1*var_reg(i,k)))*vols(i)*wf1(k,ndof)
362 fnlth(i,k) = fnlth(i,k) + (k12*unlth(i,k-1) + k2*unlth(i,k)
363 . + damp*(nth1*nth2*vpred(i,k-1)
364 . + (nth2**2)*vpred(i,k)
365 . - nth2*var_reg(i,k))*vols
366 ELSE
367 fnlth(i,k) = fnlth(i,k) + (k1*unlth(i,k) + k12*unlth(i,k+1)
368 . + damp*((nth1**2)*vpred(i
369 . + (nth1*nth2)*vpred(i,k+1))
370 . - (nth1*var_reg(i,k)))*vols(i)*wf1(k,ndof)
371 fnlth(i,k+1) = fnlth(i,k+1) + (k12*unlth(i,k) + k2*unlth(i,k+1)
372 . + damp*(nth1*nth2*vpred(i,k)
373 . + (nth2**2)*vpred(i,k+1))
374 . - nth2*var_reg(i,k))*vols(i)*wf1(k,ndof)
375 ENDIF
376 ENDDO
377 ENDDO
378
379 DO k = 1,ndnod
380 DO i = 1,nel
381
382 vnlth(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*dt_nl
383 ENDDO
384 ENDDO
385
386 DO k = 1,ndnod
387 DO i = 1,nel
388
389 unlth(i,k) = unlth(i,k) + vnlth(i,k)*dt_nl
390 ENDDO
391 ENDDO
392
393
394 DO k = 1, ndof
395
396 IF ((ndof==2).AND.(k==2)) THEN
397 nth1 = (z01(k,ndof) - zn1(k,ndof))/(zn1(k-1,ndof) - zn1(k,ndof))
398 nth2 = (z01(k,ndof) - zn1(k-1,ndof)) /(zn1(k,ndof) - zn1(k-1,ndof))
399 ELSE
400 nth1 = (z01(k,ndof) - zn1(k+1,ndof))/(zn1(k,ndof) - zn1(k+1,ndof))
401 nth2 = (z01(k,ndof) - zn1(k,ndof)) /(zn1(k+1,ndof
402 ENDIF
403
404 DO i = 1,nel
405
406 IF ((ndof==2).AND.(k==2)) THEN
407 var_reg(i,k) = nth1*unlth(i,k-1) + nth2*unlth(i,k)
408 ELSE
409 var_reg(i,k) = nth1*unlth(i,k) + nth2*unlth(i,k+1)
410 ENDIF
411 ENDDO
412 ENDDO
413
414 DO ir = 1,nptr
415 DO is = 1,npts
416 bufnl => elbuf_tab(ng)%NLOC(ir,is)
417 bufnl%MASSTH(1:nel,1:ndnod) = elbuf_tab(ng)%NLOC(1,1)%MASSTH(1:nel,1:ndnod)
418 bufnl%MASSTH(1:nel,1:ndnod) = elbuf_tab(ng)%NLOC(1,1)%UNLTH(1:nel,1:ndnod)
419 bufnl%MASSTH(1:nel,1:ndnod) = elbuf_tab(ng)%NLOC(1,1)%VNLTH(1:nel,1:ndnod)
420 bufnl%MASSTH(1:nel,1:ndnod) = elbuf_tab(ng)%NLOC(1,1)%FNLTH(1:nel,
421 ENDDO
422 ENDDO
423 ENDIF
424
425
426
427
428
429 DO k = 1,ndof
430
431
432# include "vectorize.inc"
433 DO i = 1,nel
434
435
436 IF (offg(i) > zero) THEN
437
438
439 b1 = ((len**2)*vols(i))*wf1(k,ndof)*(btb11(i)*unl
440 . + btb13(i)*unl(pos3(i)+k-1))
441 b2 = ((len**2)*vols(i))*wf1(k,ndof)*(btb12(i)*unl(pos1(i)+k-1) + btb22(i)*unl(pos2(i)+k-1)
442 . + btb23(i)*unl(pos3(i)+k-1))
443 b3 = ((len**2)*vols(i))*wf1(k,ndof)*(btb13(i)*unl(pos1(i)+k-1) + btb23(i)*unl(pos2(i)+k-1)
444 . + btb33(i)*unl(pos3(i)+k-1))
445
446 ntn_unl = ((unl(pos1(i)+k-1) + unl(pos2(i)+k-1) + unl(pos3(i)+k-1))*third*third)*vols(i)*wf1(k,ndof)
447
448 ntn_vnl = ((vnl(pos1(i)+k-1) + vnl(pos2(i)+k-1) + vnl(pos3(i)+k-1))*third*third)*damp*vols(i)*wf1(k,ndof)
449
450 ntvar = var_reg(i,k)*third*vols(i)*wf1(k,ndof)
451
452 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) - (ntn_unl + ntn_vnl - ntvar + b1)
453 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) - (ntn_unl + ntn_vnl - ntvar + b2)
454 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) - (ntn_unl + ntn_vnl - ntvar
455 ELSE
456
457 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) -
458 . wf1(k,ndof)*dens*sspnl*vnl(pos1(i)+k-1)*sqrt((four/sqrt(three))*(le_max**2))*thck(i)
459 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) -
460 . wf1(k,ndof)*dens*sspnl*vnl(pos2(i)+k-1)*sqrt((four/sqrt(three))*(le_max**2))*thck(i)
461 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) -
462 . wf1(k,ndof)*dens*sspnl*vnl(pos3(i)+k-
463 ENDIF
464 ENDDO
465 ENDDO
466
467 IF (ALLOCATED(var_reg)) DEALLOCATE(var_reg)
468 IF (ALLOCATED(vpred)) DEALLOCATE(vpred)
subroutine cdkevec3(jft, jlt, area, x1, x2, x3, y1, y2, y3, z1, z2, z3, e1x, e2x, e3x, e1y, e2y, e3y, e1z, e2z, e3z)
subroutine cnloc_matini(elbuf_str, nel, ipm, bufmat, time, varnl, failure)
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine area(d1, x, x2, y, y2, eint, stif0)