32 1 NLOC_DMG,VAR_REG, THK, NEL,
33 2 OFF, AREA, NC1, NC2,
34 3 NC3, NC4, BUFNL, IMAT,
35 4 NDDL, ITASK, NG, JFT,
37 6 Y24, DT2T, THK0, AREA0,
47#include "implicit_f.inc"
59 INTEGER,
INTENT(IN) :: NFT
60 INTEGER :: NEL,IMAT,NDDL,ITASK,NG,
62 INTEGER,
DIMENSION(NEL) :: NC1,NC2,NC3,NC4
63 my_real,
DIMENSION(NEL,NDDL),
INTENT(INOUT)::
65 my_real,
DIMENSION(NEL),
INTENT(IN) ::
66 .
area,off,thk,x13,y13,x24,y24,thk0,area0
68 TYPE(BUF_NLOC_) ,
TARGET :: BUFNL
69 my_real,
INTENT(INOUT) ::
74 INTEGER I,II,K,N1,N2,N3,N4,L_NLOC,J,EP,NDNOD
76 . dx, dy, dz, l2,ntn,ntn_unl,ntn_vnl,xi,ntvar,a,zeta,
77 . b1,b2,b3,b4,sspnl,le_max,maxstif,dtnod,dt2p,
78 . nth1, nth2, bth1, bth2, k1, k2, k12, ntn_unl1,
79 . ntn_unl2,ntn_unl3,ntn_unl4,ntn_vnl1,ntn_vnl2,ntn_vnl3,
80 . ntn_vnl4,a1,a2,a3,a4
82 . vpg(2,4),pg1,pg,ksi,eta,sf1,sf2,sf3,sf4
83 parameter(pg=.577350269189626)
84 parameter(pg1=-.577350269189626)
85 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
86 . f1,f2,f3,f4,sti1,sti2,sti3,sti4
87 my_real,
DIMENSION(:),
ALLOCATABLE ::
88 . vol,btb11,btb12,btb22
89 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
91 my_real,
POINTER,
DIMENSION(:) ::
92 . vnl,fnl,unl,stifnl,mass,mass0,vnl0
93 my_real,
POINTER,
DIMENSION(:,:) ::
94 . massth,unlth,vnlth,fnlth
95 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
97 DATA vpg/pg1,pg1,pg,pg1,pg,pg,pg1,pg/
100 my_real,
PARAMETER :: csta = 40.0d0
102 my_real,
PARAMETER :: cdamp = 0.7d0
108 l2 = nloc_dmg%LEN(imat)**2
109 xi = nloc_dmg%DAMP(imat)
110 zeta = nloc_dmg%DENS(imat)
111 sspnl = nloc_dmg%SSPNL(imat)
112 l_nloc = nloc_dmg%L_NLOC
113 le_max = nloc_dmg%LE_MAX(imat)
115 ALLOCATE(f1(nel,nddl),f2(nel,nddl),f3(nel,nddl),f4(nel,nddl))
119 ALLOCATE(sti1(nel,nddl),sti2(nel,nddl),sti3(nel,nddl),sti4(nel,nddl))
121 mass => nloc_dmg%MASS(1:l_nloc)
123 mass0 => nloc_dmg%MASS0(1:l_nloc)
125 ALLOCATE(vol(nel),btb11(nel),btb12(nel),btb22(nel),
126 . pos1(nel),pos2(nel),pos3(nel),pos4(nel))
128 vnl => nloc_dmg%VNL(1:l_nloc)
129 vnl0 => nloc_dmg%VNL_OLD(1:l_nloc)
130 unl => nloc_dmg%UNL(1:l_nloc)
138# include "vectorize.inc"
142 n1 = nloc_dmg%IDXI(nc1(i))
143 n2 = nloc_dmg%IDXI(nc2(i))
144 n3 = nloc_dmg%IDXI(nc3(i))
145 n4 = nloc_dmg%IDXI(nc4(i))
148 pos1(i) = nloc_dmg%POSI(n1)
149 pos2(i) = nloc_dmg%POSI(n2)
150 pos3(i) = nloc_dmg%POSI(n3)
151 pos4(i) = nloc_dmg%POSI(n4)
154 vol(i) = fourth*thk(i)*
area(i)
157 btb11(i) = y24(i)**2 + (-x24(i))**2
158 btb12(i) = y24(i)*(-y13(i
167 IF ((nddl > 1).AND.(l2>zero))
THEN
172 ALLOCATE(stifnlth(nel,nddl+1))
173 ALLOCATE(dtn(nel,nddl
178 ALLOCATE(stifnlth(nel,nddl))
179 ALLOCATE(dtn(nel,nddl))
185 massth => bufnl%MASSTH(1:nel,1:ndnod)
186 unlth => bufnl%UNLTH(1:nel,1:ndnod)
187 vnlth => bufnl%VNLTH(1:nel,1:ndnod)
188 fnlth => bufnl%FNLTH(1:nel,1:ndnod)
205 IF ((nddl==2).AND.(k==2))
THEN
206 nth1 = (z0(k,nddl) - zth(k,nddl)) / (zth(k-1,nddl) - zth(k,nddl))
207 nth2 = (z0(k,nddl) - zth(k-1,nddl)) / (zth(k,nddl) - zth(k-1,nddl))
209 nth1 = (z0(k,nddl) - zth(k+1,nddl)) / (zth(k,nddl) - zth(k+1,nddl))
210 nth2 = (z0(k,nddl) - zth(k,nddl)) / (zth(k+1,nddl) - zth(k,nddl))
216 IF ((nddl==2).AND.(k==2))
THEN
217 bth1 = (one/(zth(k-1,nddl) - zth(k,nddl)))*(one/thk(i))
218 bth2 = (one/(zth(k,nddl) - zth(k-1,nddl)))*(one/thk(i))
220 bth1 = (one/(zth(k,nddl) - zth(k+1,nddl)))*(one/thk(i))
221 bth2 = (one/(zth(k+1,nddl) - zth(k,nddl)))*(one/thk(i))
225 k1 = l2*(bth1**2) + nth1**2
226 k12 = l2*(bth1*bth2)+ (nth1*nth2)
227 k2 = l2*(bth2**2) + nth2**2
230 IF ((nddl==2).AND.(k==2))
THEN
231 fnlth(i,k-1) = fnlth(i,k-1) + (k1*unlth(i,k-1) + k12*unlth(i,k)
232 . + xi*((nth1**2)*vnlth(i,k-1)
233 . + (nth1*nth2)*vnlth(i,k))
234 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
235 fnlth(i,k) = fnlth(i,k) + (k12*unlth(i,k-1) + k2*unlth(i,k)
237 . + (nth2**2)*vnlth(i,k))
238 . - (nth2*var_reg(i,k)))*vol(i)*wf(k,nddl)
240 fnlth(i,k) = fnlth(i,k) + (k1*unlth(i,k) + k12*unlth(i,k+1)
241 . + xi*((nth1**2)*vnlth(i,k)
242 . + (nth1*nth2)*vnlth(i,k+1))
243 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
244 fnlth(i,k+1) = fnlth(i,k+1) + (k12*unlth(i,k) + k2*unlth(i,k+1)
246 . + (nth2**2)*vnlth(i,k+1))
247 . - (nth2*var_reg(i,k)))*vol(i)*wf(k,nddl)
252 IF ((nddl==2).AND.(k==2))
THEN
253 stifnlth(i,k-1) = stifnlth(i,k-1) + (
max(abs(k1)+abs(k12),abs(k12)+abs(k2)))*vol(i)*wf(k,nddl)
254 stifnlth(i,k) = stifnlth(i,k) + (
max(abs(k1)+abs(k12),abs(k12)+abs(k2)))*vol(i)*wf(k,nddl)
256 stifnlth(i,k) = stifnlth(i,k) + (
max(abs(k1)+abs(k12),abs(k12)+abs(k2)))*vol(i)*wf(k,nddl)
257 stifnlth(i,k+1) = stifnlth(i,k+1) + (
max(abs(k1)+abs(k12),abs(k12)+abs(k2)))*vol(i)*wf(k,nddl)
271 dtn(i,k) = dtfac1(11)*cdamp*sqrt(two*massth(i,k)/
max(stifnlth(i,k),em20))
272 dtnod =
min(dtn(i,k),dtnod)
277 IF ((idtmin(11)==3).OR.(idtmin(11)==4).OR.(idtmin(11)==8))
THEN
279 IF (dtnod < dtmin1(11)*(sqrt(csta)))
THEN
282 IF (dtn(i,k) < dtmin1(11))
THEN
283 dt2p = dtmin1(11)/(dtfac1(11)*cdamp)
284 massth(i,k) =
max(massth(i,k),csta*half*stifnlth(i,k)*dt2p*dt2p*onep00001)
289 dtnod = dtmin1(11)*(sqrt(csta))
293 IF (dtnod < dt2t)
THEN
294 dt2t =
min(dt2t,dtnod)
301 vnlth(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*dt12
308 unlth(i,k) = unlth(i,k) + vnlth(i,k)*dt1
315 IF ((nddl==2).AND.(k==2))
THEN
316 nth1 = (z0(k,nddl) - zth(k,nddl))/(zth(k-1,nddl) - zth(k,nddl))
317 nth2 = (z0(k,nddl) - zth(k-1,nddl)) /(zth(k,nddl) - zth(k-1,nddl))
319 nth1 = (z0(k,nddl) - zth(k+1,nddl))/(zth(k,nddl) - zth(k+1,nddl))
320 nth2 = (z0(k,nddl) - zth(k,nddl)) /(zth(k+1,nddl) - zth(k,nddl))
325 IF ((nddl==2).AND.(k==2))
THEN
326 var_reg(i,k) = nth1*unlth(i,k-1) + nth2*unlth(i,k)
328 var_reg(i,k) = nth1*unlth(i,k) + nth2*unlth(i,k+1)
341 sf1 = fourth*(1-ksi)*(1-eta)
342 sf2 = fourth*(1+ksi)*(1-eta)
343 sf3 = fourth*(1+ksi)*(1+eta)
344 sf4 = fourth*(1-ksi)*(1+eta)
350# include "vectorize.inc"
354 IF (off(i) /= zero)
THEN
358 b1 = l2*vol(i)*wf(k,nddl)*(btb11(i)*unl(pos1(i)+k-1) + btb12(i)*unl(pos2(i)+k-1)
359 . - btb11(i)*unl(pos3(i)+k-1) - btb12(i)*unl(pos4(i)+k-1))
361 b2 = l2*vol(i)*wf(k,nddl)*(btb12(i)*unl(pos1(i)+k-1) + btb22(i)*unl(pos2(i)+k-1)
362 . - btb12(i)*unl(pos3(i)+k-1) - btb22(i)*unl(pos4(i)+k-1))
364 b3 = l2*vol(i)*wf(k,nddl)*(-btb11(i)*unl(pos1(i)+k-1) - btb12(i)*unl(pos2(i)+k-1)
365 . + btb11(i)*unl(pos3(i)+k-1) + btb12(i)*unl(pos4(i)+k-1))
367 b4 = l2*vol(i)*wf(k,nddl)*(-btb12(i)*unl(pos1(i)+k-1) - btb22(i)*unl(pos2(i)+k-1)
368 . + btb12(i)*unl(pos3(i)+k-1) + btb22(i)*unl(pos4(i)+k-1))
371 ntn_unl1 = sf1*sf1*unl(pos1(i)+k-1) + sf1*sf2*unl(pos2(i)+k-1) + sf1*sf3*unl(pos3(i)+k-1) + sf1*sf4*unl(pos4(i)+k
372 ntn_unl2 = sf2*sf1*unl(pos1(i)+k-1) + sf2*sf2*unl(pos2(i)+k-1) + sf2*sf3*unl(pos3(i)+k-1) + sf2*sf4*unl(pos4(i)+k-1)
373 ntn_unl3 = sf3*sf1*unl(pos1(i)+k-1) + sf3*sf2*unl(pos2(i)+k-1) + sf3*sf3*unl(pos3(i)+k-1) + sf3*sf4*unl(pos4(i)+k-1)
374 ntn_unl4 = sf4*sf1*unl(pos1(i)+k-1) + sf4*sf2*unl(pos2(i)+k-1) + sf4*sf3*unl(pos3(i)+k-1) + sf4*sf4*unl(pos4(i)+k-1)
377 ntn_vnl1 = sf1*sf1*vnl(pos1(i)+k-1) + sf1*sf2*vnl(pos2(i)+k-1) + sf1*sf3*vnl(pos3(i)+k-1) + sf1*sf4*vnl(pos4(i)+k-1)
381 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)),
382 . sqrt(mass(pos4(i)+k-1)/mass0(pos4(i)+k-1)))*ntn_vnl1
384 ntn_vnl2 = sf2*sf1*vnl(pos1(i)+k-1) + sf2*sf2*vnl(pos2(i)+k-1) + sf2*sf3*vnl(pos3(i)+k-1) + sf2*sf4*vnl(pos4(i)+k-1)
386 ntn_vnl2 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
387 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
388 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)),
389 . sqrt(mass(pos4(i)+k-1)/mass0(pos4(i)+k-1)))*ntn_vnl2
391 ntn_vnl3 = sf3*sf1*vnl(pos1(i)+k-1) + sf3*sf2*vnl(pos2(i)+k-1) + sf3*sf3*vnl(pos3(i)+k-1) + sf3*sf4*vnl(pos4(i)+k-1)
393 ntn_vnl3 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
394 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
395 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)),
396 . sqrt(mass(pos4(i)+k-1)/mass0(pos4(i)+k
398 ntn_vnl4 = sf4*sf1*vnl(pos1(i)+k-1) + sf4*sf2*vnl(pos2(i)+k-1) + sf4*sf3*vnl(pos3(i)+k-1) + sf4*sf4*vnl(pos4(i)+k-1)
400 ntn_vnl4 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
401 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
402 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)),
403 . sqrt(mass(pos4(i)+k-1)/mass0(pos4(i)+k-1)))*ntn_vnl4
407 a1 = (ntn_unl1 + ntn_vnl1*xi - sf1*var_reg(i,k)) * vol(i) * wf(k,nddl)
408 a2 = (ntn_unl2 + ntn_vnl2*xi - sf2*var_reg(i,k)) * vol(i) * wf(k,nddl)
409 a3 = (ntn_unl3 + ntn_vnl3*xi - sf3*var_reg(i,k)) * vol(i) * wf(k,nddl)
410 a4 = (ntn_unl4 + ntn_vnl4*xi - sf4*var_reg(i,k)) * vol(i) * wf(k,nddl)
420 sti1(i,k) = (abs(l2*btb11(i) + sf1*sf1) + abs(l2*btb12(i) + sf1*sf2) +
421 . abs(-l2*btb11(i) + sf1*sf3) + abs(-l2*btb12(i) + sf1*sf4))*vol(i)*wf(k,nddl)
422 sti2(i,k) = (abs(l2*btb12(i) + sf2*sf1) + abs(l2*btb22(i) + sf2*sf2) +
423 . abs(-l2*btb12(i) + sf2*sf3) + abs(-l2*btb22(i) + sf2*sf4))*vol(i)*wf(k,nddl)
424 sti3(i,k) = (abs(-l2*btb11(i) + sf3*sf1) + abs(-l2*btb12(i) + sf3*sf2) +
425 . abs(l2*btb11(i) + sf3*sf3) + abs(l2*btb12(i) + sf3*sf4))*vol(i)*wf(k,nddl)
426 sti4(i,k) = (abs(-l2*btb12(i) + sf4*sf1) + abs(-l2*btb22(i) + sf4*sf2) +
427 . abs(l2*btb12(i) + sf4*sf3) + abs(l2*btb22(i) + sf4*sf4))*vol(i)*wf(k,nddl)
434 f1(i,k) = sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1))*sf1*wf(k,nddl)*zeta*sspnl*
435 . half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*sqrt(area0(i))*thk0(i)
436 f2(i,k) = sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1))*sf2*wf(k,nddl)*zeta*sspnl*
437 . half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*sqrt(area0(i))*thk0(i)
438 f3(i,k) = sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1))*sf3*wf(k,nddl)*zeta*sspnl*
439 . half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*sqrt(area0(i))*thk0(i)
440 f4(i,k) = sqrt(mass(pos4(i)+k-1)/mass0(pos4(i)+k-1))*sf4*wf(k,nddl)*zeta*sspnl*
441 . half*(vnl(pos4(i)+k-1)+vnl0(pos4(i)+k-1))*sqrt(area0(i))*thk0(i)
449 f1(i,k) = sf1*wf(k,nddl)*zeta*sspnl*half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*sqrt(area0(i))*thk0(i)
450 f2(i,k) = sf2*wf(k,nddl)*zeta*sspnl*half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*sqrt(area0(i))*thk0(i)
451 f3(i,k) = sf3*wf(k,nddl)*zeta*sspnl*half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*sqrt(area0(i))*thk0(i)
452 f4(i,k) = sf4*wf(k,nddl)*zeta*sspnl*half*(vnl(pos4(i)+k-1)+vnl0(pos4(i)+k-1))*sqrt(area0(i))*thk0(i
463 IF (iparit == 0)
THEN
465 fnl => nloc_dmg%FNL(1:l_nloc,itask+1)
466 IF (nodadt > 0) stifnl => nloc_dmg%STIFNL(1:l_nloc,itask+1)
470# include "vectorize.inc"
473 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) - f1(i,k)
474 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) - f2(i,k)
475 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) - f3(i,k)
476 fnl(pos4(i)+k-1) = fnl(pos4(i)+k-1) - f4(i,k)
479 maxstif =
max(sti1(i,k),sti2(i,k),sti3(i,k),sti4(i,k))
481 stifnl(pos1(i)+k-1) = stifnl(pos1(i)+k-1) + maxstif
482 stifnl(pos2(i)+k-1) = stifnl(pos2(i)+k-1) + maxstif
483 stifnl(pos3(i)+k-1) = stifnl(pos3(i)+k-1) + maxstif
484 stifnl(pos4(i)+k-1) = stifnl(pos4(i)+k-1) + maxstif
501 maxstif =
max(sti1(i,j),sti2(i,j),sti3(i,j),sti4(i,j))
504 k = nloc_dmg%IADC(1,ii)
506 nloc_dmg%FSKY(k,j) = -f1(i,j)
507 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
509 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f1(i,j)
510 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
513 k = nloc_dmg%IADC(2,ii)
515 nloc_dmg%FSKY(k,j) = -f2(i,j)
516 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
518 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f2(i,j)
519 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
522 k = nloc_dmg%IADC(3,ii)
524 nloc_dmg%FSKY(k,j) = -f3(i,j)
525 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
527 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f3(i,j)
528 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
531 k = nloc_dmg%IADC(4,ii)
533 nloc_dmg%FSKY(k,j) = -f4(i,j)
534 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
536 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f4(i,j)
537 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
546 IF (
ALLOCATED(f1))
DEALLOCATE(f1)
547 IF (
ALLOCATED(f2))
DEALLOCATE(f2)
548 IF (
ALLOCATED(f3))
DEALLOCATE(f3)
549 IF (
ALLOCATED(f4))
DEALLOCATE(f4)
550 IF (
ALLOCATED(stifnlth))
DEALLOCATE(stifnlth)
551 IF (
ALLOCATED(btb11))
DEALLOCATE(btb11)
552 IF (
ALLOCATED(btb12))
DEALLOCATE(btb12)
553 IF (
ALLOCATED(btb22))
DEALLOCATE(btb22)
554 IF (
ALLOCATED(pos1))
DEALLOCATE(pos1)
555 IF (
ALLOCATED(pos2))
DEALLOCATE(pos2)
556 IF (
ALLOCATED(pos3))
DEALLOCATE(pos3)
557 IF (
ALLOCATED(pos4))
DEALLOCATE(pos4)
558 IF (
ALLOCATED(sti1))
DEALLOCATE(sti1)
559 IF (
ALLOCATED(sti2))
DEALLOCATE(sti2)
560 IF (
ALLOCATED(sti3))
DEALLOCATE(sti3)
561 IF (
ALLOCATED(sti4))
DEALLOCATE(sti4)