38
39
40
42 USE elbufdef_mod
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "parit_c.inc"
51#include "com20_c.inc"
52#include "com08_c.inc"
53#include "scr02_c.inc"
54#include "scr18_c.inc"
55
56
57
58 INTEGER, INTENT(IN) :: NFT
59 INTEGER :: NEL,IMAT,NDDL,ITASK
60 INTEGER, DIMENSION(NEL) :: NC1,NC2,NC3
61 my_real,
DIMENSION(NEL,NDDL),
INTENT(INOUT)::
62 . var_reg
63 my_real,
DIMENSION(NEL),
INTENT(IN) ::
64 .
area,off,px1,py1,py2,thk,le,thk0,area0
66 . dt2t
67 TYPE(NLOCAL_STR_), TARGET :: NLOC_DMG
68 TYPE(BUF_NLOC_) , TARGET :: BUFNL
69
70
71
72 INTEGER I,K,N1,N2,N3,L_NLOC,II,J,NDNOD
74 . l2,ntn,ntn_unl,ntn_vnl,xi,ntvar,a,
75 . b1,b2,b3,zeta,sspnl,
76 . nth1,nth2,bth1,bth2,k1,k2,k12,
77 . dtnl_th,dtnl,le_max,maxstif,
78 . dtnod,dt2p
79 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
80 . f1,f2,f3,sti1,sti2,sti3
81 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
82 . btb11,btb12,btb13,btb22,btb23,btb33,vol
83 INTEGER, DIMENSION(:), ALLOCATABLE ::
84 . POS1,POS2,POS3
85 my_real,
POINTER,
DIMENSION(:) ::
86 . vnl,fnl,unl,stifnl,mass,mass0,vnl0
87 my_real,
POINTER,
DIMENSION(:,:) ::
88 . massth,unlth,vnlth,fnlth
89 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
90 . stifnlth,dtn
91
92
93
94
95
96 l2 = nloc_dmg%LEN(imat)**2
97 xi = nloc_dmg%DAMP(imat)
98 zeta = nloc_dmg%DENS(imat)
99 sspnl = nloc_dmg%SSPNL(imat)
100 l_nloc = nloc_dmg%L_NLOC
101 le_max = nloc_dmg%LE_MAX(imat)
102
103 ALLOCATE(f1(nel,nddl),f2(nel,nddl),f3(nel,nddl))
104
105 IF (nodadt > 0) THEN
106
107 ALLOCATE(sti1(nel,nddl),sti2(nel,nddl),sti3(nel,nddl))
108
109 mass => nloc_dmg%MASS(1:l_nloc)
110
111 mass0 => nloc_dmg%MASS0(1:l_nloc)
112 ENDIF
113 ALLOCATE(btb11(nel),btb12(nel),btb13(nel),btb22(nel),
114 . btb23(nel),btb33(nel),vol(nel),pos1(nel),
115 . pos2(nel),pos3(nel))
116
117 vnl => nloc_dmg%VNL(1:l_nloc)
118 vnl0 => nloc_dmg%VNL_OLD(1:l_nloc)
119 unl => nloc_dmg%UNL(1:l_nloc)
120
121 ntn = three*three
122
123
124
125
126
127# include "vectorize.inc"
128 DO i=1,nel
129
130
131 n1 = nloc_dmg%IDXI(nc1(i))
132 n2 = nloc_dmg%IDXI(nc2(i))
133 n3 = nloc_dmg%IDXI(nc3(i))
134
135
136 pos1(i) = nloc_dmg%POSI(n1)
137 pos2(i) = nloc_dmg%POSI(n2)
138 pos3(i) = nloc_dmg%POSI(n3)
139
140
141 vol(i) =
area(i)*thk(i)
142
143
144 btb11(i) = px1(i)**2 + py1(i)**2
145 btb12(i) = -px1(i)**2 + py1(i)*py2(i)
146 btb13(i) = -py1(i)*(py1(i)+py2(i))
147 btb22(i) = px1(i)**2 + py2(i)**2
148 btb23(i) = -py2(i)*(py1(i)+py2(i))
149 btb33(i) = (py1(i)+py2(i))**2
150
151 ENDDO
152
153
154
155
156
157 IF ((nddl > 1).AND.(l2>zero)) THEN
158
159
160 IF (nddl > 2) THEN
161 IF (nodadt > 0) THEN
162 ALLOCATE(stifnlth(nel,nddl+1))
163 ALLOCATE(dtn(nel,nddl+1))
164 ENDIF
165 ndnod = nddl+1
166 ELSE
167 IF (nodadt > 0) THEN
168 ALLOCATE(stifnlth(nel,nddl))
169 ALLOCATE(dtn(nel,nddl))
170 ENDIF
171 ndnod = nddl
172 ENDIF
173
174
175 massth => bufnl%MASSTH(1:nel,1:ndnod)
176 unlth => bufnl%UNLTH(1:nel ,1:ndnod)
177 vnlth => bufnl%VNLTH(1:nel ,1:ndnod)
178 fnlth => bufnl%FNLTH(1:nel ,1:ndnod)
179
180 DO k = 1,ndnod
181 DO i = 1,nel
182
183 fnlth(i,k) = zero
184
185 IF (nodadt > 0) THEN
186 stifnlth(i,k) = em20
187 ENDIF
188 ENDDO
189 ENDDO
190
191
192 DO k = 1, nddl
193
194
195 IF ((nddl==2).AND.(k==2)) THEN
196 nth1 = (z0(k,nddl) - zth(k,nddl)) / (zth(k-1,nddl) - zth(k,nddl))
197 nth2 = (z0(k,nddl) - zth(k-1,nddl)) / (zth(k,nddl) - zth(k-1,nddl))
198 ELSE
199 nth1 = (z0(k,nddl) - zth(k+1,nddl)) / (zth(k,nddl) - zth(k+1,nddl))
200 nth2 = (z0(k,nddl) - zth(k,nddl)) / (zth(k+1,nddl) - zth(k,nddl))
201 ENDIF
202
203
204 DO i = 1,nel
205
206 IF ((nddl==2).AND.(k==2)) THEN
207 bth1 = (one/(zth(k-1,nddl) - zth(k,nddl)))*(one/thk(i))
208 bth2 = (one/(zth(k,nddl) - zth(k-1,nddl)))*(one/thk(i))
209 ELSE
210 bth1 = (one/(zth(k,nddl) - zth(k+1,nddl)))*(one/thk(i))
211 bth2 = (one/(zth(k+1,nddl) - zth(k,nddl)))*(one/thk(i))
212 ENDIF
213
214
215 k1 = l2*(bth1**2) + nth1**2
216 k12 = l2*(bth1*bth2)+ (nth1*nth2)
217 k2 = l2*(bth2**2) + nth2**2
218
219
220 IF ((nddl==2).AND.(k==2)) THEN
221 fnlth(i,k-1) = fnlth(i,k-1) + (k1*unlth(i,k-1) + k12*unlth(i,k)
222 . + xi*((nth1**2)*vnlth(i,k-1)
223 . + (nth1*nth2)*vnlth(i,k))
224 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
225 fnlth(i,k) = fnlth(i,k) + (k12*unlth(i,k-1) + k2*unlth(i,k)
226 . + xi*(nth1*nth2*vnlth(i,k-1)
227 . + (nth2**2)*vnlth(i,k))
228 . - nth2*var_reg(i,k))*vol(i)*wf(k,nddl)
229 ELSE
230 fnlth(i,k) = fnlth(i,k) + (k1*unlth(i,k) + k12*unlth(i,k+1)
231 . + xi*((nth1**2)*vnlth(i,k)
232 . + (nth1*nth2)*vnlth(i,k+1))
233 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
234 fnlth(i,k+1) = fnlth(i,k+1) + (k12*unlth(i,k) + k2*unlth(i,k+1)
235 . + xi*(nth1*nth2*vnlth(i,k)
236 . + (nth2**2)*vnlth(i,k+1))
237 . - nth2*var_reg(i,k))*vol(i)*wf(k,nddl)
238 ENDIF
239
240
241 IF (nodadt > 0) THEN
242 IF ((nddl==2).AND.(k==2)) THEN
243 stifnlth(i,k-1) = stifnlth(i,k-1) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
244 stifnlth(i,k) = stifnlth(i,k) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
245 ELSE
246 stifnlth(i,k) = stifnlth(i,k) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
247 stifnlth(i,k+1) = stifnlth(i,k+1) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
248 ENDIF
249 ENDIF
250
251 ENDDO
252 ENDDO
253
254
255 IF (nodadt > 0) THEN
256
257
258 dtnod = ep20
259 DO k = 1,ndnod
260 DO i = 1,nel
261 dtn(i,k) = dtfac1(11)*cdamp*sqrt(two * massth(i,k) /
max(stifnlth(i,k),em20))
262 dtnod =
min(dtn(i,k),dtnod)
263 ENDDO
264 ENDDO
265
266
267 IF ((idtmin(11)==3).OR.(idtmin(11)==4).OR.(idtmin(11)==8)) THEN
268
269 IF (dtnod < dtmin1(11)) THEN
270 DO k = 1,ndnod
271 DO i = 1,nel
272 IF (dtn(i,k) < dtmin1(11)) THEN
273 dt2p = dtmin1(11)/(dtfac1(11)*cdamp)
274 massth(i,k) =
max(massth(i,k),csta*half*stifnlth(i,k)*dt2p*dt2p*onep00001)
275 ENDIF
276 ENDDO
277 ENDDO
278 dtnod = dtmin1(11)*(sqrt(csta))
279 ENDIF
280 ENDIF
281
282
283 IF (dtnod < dt2t) THEN
284 dt2t =
min(dt2t,dtnod)
285 ENDIF
286 ENDIF
287
288 DO k = 1,ndnod
289 DO i = 1,nel
290
291 vnlth(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*dt12
292 ENDDO
293 ENDDO
294
295 DO k = 1,ndnod
296 DO i = 1,nel
297
298 unlth(i,k) = unlth(i,k) + vnlth(i,k)*dt1
299 ENDDO
300 ENDDO
301
302
303 DO k = 1, nddl
304
305 IF ((nddl==2).AND.(k==2)) THEN
306 nth1 = (z0(k,nddl) - zth(k,nddl))/(zth(k-1,nddl) - zth(k,nddl))
307 nth2 = (z0(k,nddl) - zth(k-1,nddl)) /(zth(k,nddl) - zth(k-1,nddl))
308 ELSE
309 nth1 = (z0(k,nddl) - zth(k+1,nddl))/(zth(k,nddl) - zth(k+1,nddl))
310 nth2 = (z0(k,nddl) - zth(k,nddl)) /(zth(k+1,nddl) - zth(k,nddl))
311 ENDIF
312
313 DO i = 1,nel
314
315 IF ((nddl==2).AND.(k==2)) THEN
316 var_reg(i,k) = nth1*unlth(i,k-1) + nth2*unlth(i,k)
317 ELSE
318 var_reg(i,k) = nth1*unlth(i,k) + nth2*unlth(i,k+1)
319 ENDIF
320 ENDDO
321 ENDDO
322 ENDIF
323
324
325
326
327
328 DO k = 1, nddl
329
330
331# include "vectorize.inc"
332 DO i = 1, nel
333
334
335 IF (off(i) /= zero) THEN
336
337
338
339 b1 = (l2 / vol(i)) * wf(k,nddl)*(btb11(i)*unl(pos1(i)+k-1) + btb12(i)*unl(pos2(i)+k-1)
340 . + btb13(i)*unl(pos3(i)+k-1))
341
342 b2 = (l2 / vol(i)) * wf(k,nddl)*(btb12(i)*unl(pos1(i)+k-1) + btb22(i)*unl(pos2(i)+k-1)
343 . + btb23(i)*unl(pos3(i)+k-1))
344
345 b3 = (l2 / vol(i)) * wf(k,nddl)*(btb13(i)*unl(pos1(i)+k-1) + btb23(i)*unl(pos2(i)+k-1)
346 . + btb33(i)*unl(pos3(i)+k-1))
347
348
349 ntn_unl = (unl(pos1(i)+k-1) + unl(pos2(i)+k-1) + unl(pos3(i)+k-1))/ntn
350
351
352 ntn_vnl = (vnl(pos1(i)+k-1) + vnl(pos2(i)+k-1) + vnl(pos3(i)+k-1))/ntn
353 IF (nodadt > 0) THEN
354 ntn_vnl =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
355 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
356 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)))*ntn_vnl
357 ENDIF
358
359
360 ntn_unl = ntn_unl * vol(i) * wf(k,nddl)
361 ntn_vnl = ntn_vnl * xi * vol(i) * wf(k,nddl)
362
363
364 ntvar = var_reg(i,k)*third*vol(i)*wf(k,nddl)
365
366
367 a = ntn_unl + ntn_vnl - ntvar
368 f1(i,k) = a + b1
369 f2(i,k) = a + b2
370 f3(i,k) = a + b3
371
372
373 IF (nodadt > 0) THEN
374 sti1(i,k) = wf(k,nddl)*(abs((l2/vol(i))*btb11(i) + one/ntn*vol(i)) +
375 . abs((l2/vol(i))*btb12(i) + one/ntn*vol(i)) +
376 . abs((l2/vol(i))*btb13(i) + one/ntn*vol(i)))
377 sti2(i,k) = wf(k,nddl)*(abs((l2/vol(i))*btb12(i) + one/ntn*vol(i)) +
378 . abs((l2/vol(i))*btb22(i) + one/ntn*vol(i)) +
379 . abs((l2/vol(i))*btb23(i) + one/ntn*vol(i)))
380 sti3(i,k) = wf(k,nddl)*(abs((l2/vol(i))*btb13(i) + one/ntn*vol(i)) +
381 . abs((l2/vol(i))*btb23(i) + one/ntn*vol(i)) +
382 . abs((l2/vol(i))*btb33(i) + one/ntn*vol(i)))
383 ENDIF
384
385
386 ELSE
387 IF (nodadt > 0) THEN
388
389 f1(i,k) = wf(k,nddl)*sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1))*zeta*sspnl*
390 . half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
391 f2(i,k) = wf(k,nddl)*sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1))*zeta*sspnl*
392 . half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
393 f3(i,k) = wf(k,nddl)*sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1))*zeta*sspnl*
394 . half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
395
396 sti1(i,k) = em20
397 sti2(i,k) = em20
398 sti3(i,k) = em20
399 ELSE
400
401 f1(i,k) = wf(k,nddl)*zeta*sspnl*half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*
402 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
403 f2(i,k) = wf(k,nddl)*zeta*sspnl*half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*
404 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
405 f3(i,k) = wf(k,nddl)*zeta*sspnl*half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*
406 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
407 ENDIF
408 ENDIF
409 ENDDO
410 ENDDO
411
412
413
414
415
416
417 IF (iparit == 0) THEN
418
419 fnl => nloc_dmg%FNL(1:l_nloc,itask+1)
420 IF (nodadt > 0) stifnl => nloc_dmg%STIFNL(1:l_nloc,itask+1)
421
422 DO i=1,nel
423
424#include "vectorize.inc"
425 DO k = 1,nddl
426
427 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) - f1(i,k)
428 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) - f2(i,k)
429 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) - f3(i,k)
430 IF (nodadt > 0) THEN
431
432 maxstif =
max(sti1(i,k),sti2(i,k),sti3(i,k))
433
434 stifnl(pos1(i)+k-1) = stifnl(pos1(i)+k-1) + maxstif
435 stifnl(pos2(i)+k-1) = stifnl(pos2(i)+k-1) + maxstif
436 stifnl(pos3(i)+k-1) = stifnl(pos3(i)+k-1) + maxstif
437 ENDIF
438 ENDDO
439 ENDDO
440
441
442 ELSE
443
444 DO j = 1,nddl
445
446
447 DO i=1,nel
448 ii = i + nft
449
450
451 IF (nodadt > 0) THEN
452 maxstif =
max(sti1(i,j),sti2(i,j),sti3(i,j))
453 ENDIF
454
455 k = nloc_dmg%IADTG(1,ii)
456 nloc_dmg%FSKY(k,j) = -f1(i,j)
457 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
458
459 k = nloc_dmg%IADTG(2,ii)
460 nloc_dmg%FSKY(k,j) = -f2(i,j)
461 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
462
463 k = nloc_dmg%IADTG(3,ii)
464 nloc_dmg%FSKY(k,j) = -f3(i,j)
465 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
466
467 ENDDO
468
469 ENDDO
470 ENDIF
471
472
473
474
475 IF (nodadt == 0) THEN
476 DO i = 1,nel
477
478 IF (off(i)/=zero) THEN
479
480 dtnl = (two*(
min(le(i),le_max))*sqrt(three*zeta))/
481 . sqrt(twelve*l2 + (
min(le(i),le_max))**2)
482
483 IF (nddl>1) THEN
484 IF (nddl > 2) THEN
485 dtnl_th = (two*(
min(thk(i)/nddl,le_max))*sqrt(three*zeta))/
486 . sqrt(twelve*l2 + (
min(thk(i)/nddl,le_max))**2)
487 ELSE
488 dtnl_th = (two*(
min(thk(i),le_max))*sqrt(three*zeta))/
489 . sqrt(twelve*l2 + (
min(thk(i),le_max))**2)
490 ENDIF
491 ELSE
492 dtnl_th = ep20
493 ENDIF
494
495 dt2t =
min(dt2t,dtfac1(1)*cdamp*dtnl_th,dtfac1(1)*cdamp*dtnl)
496 ENDIF
497 ENDDO
498 ENDIF
499
500
501 IF (ALLOCATED(f1)) DEALLOCATE(f1)
502 IF (ALLOCATED(f2)) DEALLOCATE(f2)
503 IF (ALLOCATED(f3)) DEALLOCATE(f3)
504 IF (ALLOCATED(sti1)) DEALLOCATE(sti1)
505 IF (ALLOCATED(sti2)) DEALLOCATE(sti2)
506 IF (ALLOCATED(sti3)) DEALLOCATE(sti3)
507 IF (ALLOCATED(btb11)) DEALLOCATE(btb11)
508 IF (ALLOCATED(btb12)) DEALLOCATE(btb12)
509 IF (ALLOCATED(btb13)) DEALLOCATE(btb13)
510 IF (ALLOCATED(btb22)) DEALLOCATE(btb22)
511 IF (ALLOCATED(btb23)) DEALLOCATE(btb23)
512 IF (ALLOCATED(btb33)) DEALLOCATE(btb33)
513 IF (ALLOCATED(stifnlth)) DEALLOCATE(stifnlth)
514 IF (ALLOCATED(pos1)) DEALLOCATE(pos1)
515 IF (ALLOCATED(pos2)) DEALLOCATE(pos2)
516 IF (ALLOCATED(pos3)) DEALLOCATE(pos3)
517 IF (ALLOCATED(vol)) DEALLOCATE(vol)
518
subroutine area(d1, x, x2, y, y2, eint, stif0)