32 1 NLOC_DMG,VAR_REG, THK, NEL,
33 2 OFF, AREA, NC1, NC2,
35 4 PY3, KSI, ETA, BUFNL,
36 5 IMAT, NDDL, ITASK, NG,
37 6 DT2T, THK0, AREA0, NFT)
46#include "implicit_f.inc"
58 INTEGER,
INTENT(IN) :: NFT
59 INTEGER :: NEL,IMAT,NDDL,ITASK,NG
60 INTEGER,
DIMENSION(NEL) :: NC1,NC2,NC3
61 my_real,
DIMENSION(NEL,NDDL),
INTENT(INOUT)::
63 my_real,
DIMENSION(NEL),
INTENT(IN) ::
64 .
area,off,px2,py2,px3,py3,thk,thk0,area0
65 TYPE(),
TARGET :: NLOC_DMG
66 TYPE(buf_nloc_) ,
TARGET :: BUFNL
69 my_real,
INTENT(INOUT) ::
74 INTEGER I,K,N1,N2,N3,,II,J,NDNOD
76 . l2,ntn_unl1,ntn_unl2,ntn_unl3,xi,ntvar,a,
77 . b1,b2,b3,zeta,sspnl,
78 . nth1,nth2,bth1,bth2,k1,k2,k12,
79 . ntn_vnl1,ntn_vnl2,ntn_vnl3,h(3),ntvar1,ntvar2,
80 . ntvar3,le_max,maxstif,dtnod,dt2p
81 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
82 . f1,f2,f3,sti1,sti2,sti3
83 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
84 . btb11,btb12,btb13,btb22,btb23,btb33,vol
85 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
87 my_real,
POINTER,
DIMENSION(:) ::
88 . vnl,fnl,unl,stifnl,mass,mass0,vnl0
89 my_real,
POINTER,
DIMENSION(:,:) ::
90 . massth,unlth,vnlth,fnlth
91 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
95 my_real,
PARAMETER :: csta = 40.0d0
97 my_real,
PARAMETER :: cdamp = 0.7d0
103 l2 = nloc_dmg%LEN(imat)**2
104 xi = nloc_dmg%DAMP(imat)
105 zeta = nloc_dmg%DENS(imat)
106 sspnl = nloc_dmg%SSPNL(imat)
107 l_nloc = nloc_dmg%L_NLOC
108 le_max = nloc_dmg%LE_MAX(imat)
113 ALLOCATE(f1(nel,nddl),f2(nel,nddl),f3(nel,nddl))
117 ALLOCATE(sti1(nel,nddl),sti2(nel,nddl),sti3(nel,nddl))
119 mass => nloc_dmg%MASS(1:l_nloc)
121 mass0 => nloc_dmg%MASS0(1:l_nloc)
123 ALLOCATE(btb11(nel),btb12(nel),btb13(nel),btb22(nel),
124 . btb23(nel),btb33(nel),vol(nel),pos1(nel),
125 . pos2(nel),pos3(nel))
127 vnl => nloc_dmg%VNL(1:l_nloc)
128 vnl0 => nloc_dmg%VNL_OLD(1:l_nloc)
129 unl => nloc_dmg%UNL(1:l_nloc)
135# include "vectorize.inc"
139 n1 = nloc_dmg%IDXI(nc1(i))
140 n2 = nloc_dmg%IDXI(nc2(i))
141 n3 = nloc_dmg%IDXI(nc3(i))
144 pos1(i) = nloc_dmg%POSI(n1)
145 pos2(i) = nloc_dmg%POSI(n2)
146 pos3(i) = nloc_dmg%POSI(n3)
149 vol(i) = third*
area(i)*thk(i)
152 btb11(i) = (-px3(i)-px2(i))**2 + (-py2(i)-py3(i))**2
153 btb12(i) = (-px3(i)-px2(i))*px2(i) + (-py2(i)-py3(i))*py2(i)
154 btb13(i) = (-px3(i)-px2(i))*px3(i) + (-py2(i)-py3(i))*py3(i)
155 btb22(i) = px2(i)**2 + py2(i)**2
156 btb23(i) = px2(i)*px3(i) + py2(i)*py3(i)
157 btb33(i) = px3(i)**2 + py3(i)**2
165 IF ((nddl > 1).AND.(l2>zero))
THEN
170 ALLOCATE(stifnlth(nel,nddl+1))
171 ALLOCATE(dtn(nel,nddl+1))
176 ALLOCATE(stifnlth(nel,nddl))
177 ALLOCATE(dtn(nel,nddl))
183 massth => bufnl%MASSTH(1:nel,1:ndnod)
184 unlth => bufnl%UNLTH(1:nel,1:ndnod)
185 vnlth => bufnl%VNLTH(1:nel,1:ndnod)
186 fnlth => bufnl%FNLTH(1:nel,1:ndnod)
203 IF ((nddl==2).AND.(k==2))
THEN
204 nth1 = (z0(k,nddl) - zth(k,nddl)) / (zth(k-1,nddl) - zth(k,nddl))
205 nth2 = (z0(k,nddl) - zth(k-1,nddl)) / (zth(k,nddl) - zth(k-1,nddl))
207 nth1 = (z0(k,nddl) - zth(k+1,nddl)) / (zth(k,nddl) - zth(k+1,nddl))
208 nth2 = (z0(k,nddl) - zth(k,nddl)) / (zth(k+1,nddl) - zth(k,nddl))
214 IF ((nddl==2).AND.(k==2))
THEN
215 bth1 = (one/(zth(k-1,nddl) - zth(k,nddl)))*(one/thk(i))
216 bth2 = (one/(zth(k,nddl) - zth(k-1,nddl)))*(one/thk(i))
218 bth1 = (one/(zth(k,nddl) - zth(k+1,nddl)))*(one/thk(i))
219 bth2 = (one/(zth(k+1,nddl) - zth(k,nddl)))*(one/thk(i))
223 k1 = l2*(bth1**2) + nth1**2
224 k12 = l2*(bth1*bth2)+ (nth1*nth2)
225 k2 = l2*(bth2**2) + nth2**2
228 IF ((nddl==2).AND.(k==2))
THEN
229 fnlth(i,k-1) = fnlth(i,k-1) + (k1*unlth(i,k-1) + k12*unlth(i,k)
230 . + xi*((nth1**2)*vnlth(i,k-1)
231 . + (nth1*nth2)*vnlth(i,k))
232 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
233 fnlth(i,k) = fnlth(i,k) + (k12*unlth(i,k-1) + k2*unlth(i,k)
234 . + xi*(nth1*nth2*vnlth(i,k-1)
235 . + (nth2**2)*vnlth(i,k))
236 . - nth2*var_reg(i,k))*vol(i)*wf(k,nddl)
238 fnlth(i,k) = fnlth(i,k) + (k1*unlth(i,k) + k12*unlth(i,k+1)
239 . + xi*((nth1**2)*vnlth(i,k)
240 . + (nth1*nth2)*vnlth(i,k+1))
241 . - (nth1*var_reg(i,k)))*vol(i)*wf(k,nddl)
242 fnlth(i,k+1) = fnlth(i,k+1) + (k12*unlth(i,k) + k2*unlth(i,k+1)
243 . + xi*(nth1*nth2*vnlth(i,k)
244 . + (nth2**2)*vnlth(i,k+1))
245 . - nth2*var_reg(i,k))*vol(i)*wf(k,nddl)
250 IF ((nddl==2).AND.(k==2))
THEN
251 stifnlth(i,k-1) = stifnlth(i,k-1) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
252 stifnlth(i,k) = stifnlth(i,k) +
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)
255 stifnlth(i,k+1) = stifnlth(i,k+1) +
max(abs(k1)+abs(k12),abs(k12)+abs(k2))*vol(i)*wf(k,nddl)
269 dtn(i,k) = dtfac1(11)*cdamp*sqrt(two*massth(i,k)/
max(stifnlth(i,k),em20))
270 dtnod =
min(dtn(i,k),dtnod)
275 IF ((idtmin(11)==3).OR.(idtmin(11)==4).OR.(idtmin(11)==8))
THEN
277 IF (dtnod < dtmin1(11)*(sqrt(csta)))
THEN
280 IF (dtn(i,k) < dtmin1(11))
THEN
281 dt2p = dtmin1(11)/(dtfac1(11)*cdamp)
282 massth(i,k) =
max(massth(i,k),csta*half*stifnlth(i,k)*dt2p*dt2p*onep00001)
287 dtnod = dtmin1(11)*(sqrt(csta))
291 IF (dtnod < dt2t)
THEN
292 dt2t =
min(dt2t,dtnod)
299 vnlth(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*dt12
306 unlth(i,k) = unlth(i,k) + vnlth(i,k)*dt1
313 IF ((nddl==2).AND.(k==2))
THEN
314 nth1 = (z0(k,nddl) - zth(k,nddl))/(zth(k-1,nddl) - zth(k,nddl))
315 nth2 = (z0(k,nddl) - zth(k-1,nddl)) /(zth(k,nddl) - zth(k-1,nddl))
317 nth1 = (z0(k,nddl) - zth(k+1,nddl))/(zth(k,nddl) - zth(k+1,nddl))
318 nth2 = (z0(k,nddl) - zth(k,nddl)) /(zth(k+1,nddl) - zth(k,nddl))
323 IF ((nddl==2).AND.(k==2))
THEN
324 var_reg(i,k) = nth1*unlth(i,k-1) + nth2*unlth(i,k)
326 var_reg(i,k) = nth1*unlth(i,k) + nth2*unlth(i,k+1)
339# include "vectorize.inc"
343 IF (off(i) /= zero)
THEN
345 b1 = (l2 * vol(i)) * wf(k,nddl)*(btb11(i)*unl(pos1(i)+k-1) + btb12(i)*unl(pos2(i)+k-1)
346 . + btb13(i)*unl(pos3(i)+k-1))
348 b2 = (l2 * vol(i)) * wf(k,nddl)*(btb12(i)*unl(pos1(i)+k-1) + btb22(i)*unl(pos2(i)+k-1)
349 . + btb23(i)*unl(pos3(i)+k-1))
351 b3 = (l2 * vol(i)) * wf(k,nddl)*(btb13(i)*unl(pos1(i)+k-1) + btb23(i)*unl(pos2(i)+k-1)
352 . + btb33(i)*unl(pos3(i)+k-1))
355 ntn_unl1 = h(1)*h(1)*unl(pos1(i)+k-1) + h(1)*h(2)*unl(pos2(i)+k-1) + h(1)*h(3)*unl(pos3(i)+k-1)
356 ntn_unl2 = h(2)*h(1)*unl(pos1(i)+k-1) + h(2)*h(2)*unl(pos2(i)+k-1) + h(2)*h(3)*unl(pos3(i)+k-1)
357 ntn_unl3 = h(3)*h(1)*unl(pos1(i)+k-1) + h(3)*h(2)*unl(pos2(i)+k-1) + h(3)*h(3)*unl(pos3(i)+k-1)
360 ntn_vnl1 = h(1)*h(1)*vnl(pos1(i)+k-1) + h(1)*h(2)*vnl(pos2(i)+k-1) + h(1)*h(3)*vnl(pos3(i)+k-1)
362 ntn_vnl1 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
363 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
364 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)))*ntn_vnl1
366 ntn_vnl2 = h(2)*h(1)*vnl(pos1(i)+k-1) + h(2)*h(2)*vnl(pos2(i)+k-1) + h(2)*h(3)*vnl(pos3(i)+k-1)
368 ntn_vnl2 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
369 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
370 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)))*ntn_vnl2
372 ntn_vnl3 = h(3)*h(1)*vnl(pos1(i)+k-1) + h(3)*h(2)*vnl(pos2(i)+k-1) + h(3)*h(3)*vnl(pos3(i)+k-1)
374 ntn_vnl3 =
min(sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1)),
375 . sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1)),
376 . sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1)))*ntn_vnl3
380 ntn_unl1 = ntn_unl1 * vol(i) * wf(k,nddl)
381 ntn_unl2 = ntn_unl2 * vol(i) * wf(k,nddl)
382 ntn_unl3 = ntn_unl3 * vol(i) * wf(k,nddl)
383 ntn_vnl1 = ntn_vnl1 * xi * vol(i) * wf(k,nddl)
384 ntn_vnl2 = ntn_vnl2 * xi * vol(i) * wf(k,nddl)
385 ntn_vnl3 = ntn_vnl3 * xi * vol(i) * wf(k,nddl)
388 ntvar1 = var_reg(i,k)*h(1)*vol(i)* wf(k,nddl)
389 ntvar2 = var_reg(i,k)*h(2)*vol(i)* wf(k,nddl)
390 ntvar3 = var_reg(i,k)*h(3)*vol(i)* wf(k,nddl)
393 f1(i,k) = ntn_unl1 + ntn_vnl1 - ntvar1 + b1
394 f2(i,k) = ntn_unl2 + ntn_vnl2 - ntvar2 + b2
395 f3(i,k) = ntn_unl3 + ntn_vnl3 - ntvar3 + b3
399 sti1(i,k) = (abs(l2*btb11(i) + h(1)*h(1)) + abs(l2*btb12(i) + h(1)*h(2)) +
400 . abs(l2*btb13(i) + h(1)*h(3)))* vol(i) * wf(k,nddl)
401 sti2(i,k) = (abs(l2*btb12(i) + h(2)*h(1)) + abs(l2*btb22(i) + h(2)*h(2)) +
402 . abs(l2*btb23(i) + h(2)*h(3)))* vol(i) * wf(k,nddl)
403 sti3(i,k) = (abs(l2*btb13(i) + h(3)*h(1)) + abs(l2*btb23(i) + h(3)*h(2)) +
404 . abs(l2*btb33(i) + h(3)*h(3)))* vol(i) * wf(k,nddl)
411 f1(i,k) = sqrt(mass(pos1(i)+k-1)/mass0(pos1(i)+k-1))*h(1)*wf(k,nddl)*zeta*sspnl*
412 . half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
413 f2(i,k) = sqrt(mass(pos2(i)+k-1)/mass0(pos2(i)+k-1))*h(2)*wf(k,nddl)*zeta*sspnl*
414 . half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
415 f3(i,k) = sqrt(mass(pos3(i)+k-1)/mass0(pos3(i)+k-1))*h(3)*wf(k,nddl)*zeta*sspnl*
416 . half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
423 f1(i,k) = h(1)*wf(k,nddl)*zeta*sspnl*half*(vnl(pos1(i)+k-1)+vnl0(pos1(i)+k-1))*
424 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
425 f2(i,k) = h(2)*wf(k,nddl)*zeta*sspnl*half*(vnl(pos2(i)+k-1)+vnl0(pos2(i)+k-1))*
426 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
427 f3(i,k) = h(3)*wf(k,nddl)*zeta*sspnl*half*(vnl(pos3(i)+k-1)+vnl0(pos3(i)+k-1))*
428 . sqrt((four/sqrt(three))*(area0(i)))*thk0(i)
439 IF (iparit == 0)
THEN
441 fnl => nloc_dmg%FNL(1:l_nloc,itask+1)
442 IF (nodadt > 0) stifnl => nloc_dmg%STIFNL(1:l_nloc,itask+1)
446# include "vectorize.inc"
449 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) - f1(i,k)
450 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) - f2(i,k)
451 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) - f3(i,k)
454 maxstif =
max(sti1(i,k),sti2(i,k),sti3(i,k))
456 stifnl(pos1(i)+k-1) = stifnl(pos1(i)+k-1) + maxstif
457 stifnl(pos2(i)+k-1) = stifnl(pos2(i)+k-1) + maxstif
458 stifnl(pos3(i)+k-1) = stifnl(pos3(i)+k-1) + maxstif
474 maxstif =
max(sti1(i,j),sti2(i,j),sti3(i,j))
477 k = nloc_dmg%IADTG(1,ii)
479 nloc_dmg%FSKY(k,j) = -f1(i,j)
480 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
482 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f1(i,j)
483 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
486 k = nloc_dmg%IADTG(2,ii)
488 nloc_dmg%FSKY(k,j) = -f2(i,j)
492 IF (nodadt > 0) nloc_dmg%STSKY(k,j
495 k = nloc_dmg%IADTG(3,ii)
497 nloc_dmg%FSKY(k,j) = -f3(i,j)
498 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = maxstif
500 nloc_dmg%FSKY(k,j) = nloc_dmg%FSKY(k,j) - f3(i,j)
501 IF (nodadt > 0) nloc_dmg%STSKY(k,j) = nloc_dmg%STSKY(k,j) + maxstif
510 IF (
ALLOCATED(f1))
DEALLOCATE(f1)
511 IF (
ALLOCATED(f2))
DEALLOCATE(f2)
512 IF (
ALLOCATED(f3))
DEALLOCATE(f3)
513 IF (
ALLOCATED(stifnlth))
DEALLOCATE(stifnlth)
514 IF (
ALLOCATED(btb11))
DEALLOCATE(btb11)
515 IF (
ALLOCATED(btb12))
DEALLOCATE(btb12)
516 IF (
ALLOCATED(btb13))
DEALLOCATE(btb13)
517 IF (
ALLOCATED(btb22))
DEALLOCATE(btb22)
518 IF (
ALLOCATED(btb23))
DEALLOCATE(btb23)
519 IF (
ALLOCATED(btb33))
DEALLOCATE(btb33)
520 IF (
ALLOCATED(pos1))
DEALLOCATE(pos1)
521 IF (
ALLOCATED(pos2))
DEALLOCATE(pos2)
522 IF (
ALLOCATED(pos3))
DEALLOCATE(pos3)
523 IF (
ALLOCATED(sti1))
DEALLOCATE(sti1)
524 IF (
ALLOCATED(sti2))
DEALLOCATE(sti2)
525 IF (
ALLOCATED(sti3))
DEALLOCATE(sti3)
526 IF (
ALLOCATED(vol))
DEALLOCATE(vol)