31 1 NLOC_DMG,VAR_REG, NEL, OFF,
36 6 PZ4, IMAT, ITASK, DT2T,
45#include "implicit_f.inc"
55 INTEGER,
INTENT(IN) :: NFT
56 INTEGER :: NEL, IMAT, ITASK
57 INTEGER,
DIMENSION(NEL) :: NC1,NC2,NC3,NC4
58 my_real,
INTENT(INOUT) ::
60 my_real,
DIMENSION(NEL),
INTENT(IN) ::
61 . VOL,OFF,VAR_REG,VOL0,
62 . px1,px2,px3,px4,py1,py2,py3,py4,pz1,pz2,pz3,pz4
67 INTEGER I,II,K,NNOD,N1,N2,N3,N4,L_NLOC
69 . L2,NTN,NTN_UNL,NTN_VNL,XI,NTVAR,A,
70 . b1,b2,b3,b4,zeta,sspnl,dtnl,le_max,maxstif
71 my_real,
DIMENSION(NEL) ::
73 my_real,
DIMENSION(:) ,
ALLOCATABLE ::
75 . btb33,btb34,btb44,sti1,sti2,sti3,sti4
76 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
78 my_real,
POINTER,
DIMENSION(:) ::
79 . vnl,fnl,unl,stifnl,mass,mass0,vnl0
84 l2 = nloc_dmg%LEN(imat)**2
85 xi = nloc_dmg%DAMP(imat)
87 l_nloc = nloc_dmg%L_NLOC
88 zeta = nloc_dmg%DENS(imat)
89 sspnl = nloc_dmg%SSPNL(imat)
90 le_max = nloc_dmg%LE_MAX(imat)
93 ALLOCATE(btb11(nel),btb12(nel),btb13(nel),btb14(nel),btb22(nel),
94 . btb23(nel),btb24(nel),btb33(nel),btb34(nel),btb44(nel
95 . pos2(nel),pos3(nel),pos4(nel))
99 ALLOCATE(sti1(nel),sti2(nel),sti3(nel),sti4(nel))
101 mass => nloc_dmg%MASS(1:l_nloc)
103 mass0 => nloc_dmg%MASS0(1:l_nloc)
105 vnl => nloc_dmg%VNL(1:l_nloc)
106 vnl0 => nloc_dmg%VNL_OLD(1:l_nloc)
107 unl => nloc_dmg%UNL(1:l_nloc)
113# include "vectorize.inc"
117 n1 = nloc_dmg%IDXI(nc1(i))
118 n2 = nloc_dmg%IDXI(nc2(i))
119 n3 = nloc_dmg%IDXI(nc3(i))
120 n4 = nloc_dmg%IDXI(nc4(i))
123 pos1(i) = nloc_dmg%POSI(n1)
124 pos2(i) = nloc_dmg%POSI(n2)
125 pos3(i) = nloc_dmg%POSI(n3)
126 pos4(i) = nloc_dmg%POSI(n4)
129 btb11(i) = px1(i)**2 + py1(i)**2 + pz1(i)**2
130 btb12(i) = px1(i)*px2(i) + py1(i)*py2(i) + pz1(i)*pz2(i)
131 btb13(i) = px1(i)*px3(i) + py1(i)*py3(i) + pz1(i)*pz3(i)
132 btb14(i) = px1(i)*px4(i) + py1(i)*py4(i) + pz1(i)*pz4(i)
133 btb22(i) = px2(i)**2 + py2(i)**2 + pz2(i)**2
134 btb23(i) = px2(i)*px3(i) + py2(i)*py3(i) + pz2(i)*pz3(i)
135 btb24(i) = px2(i)*px4(i) + py2(i)*py4(i) + pz2(i)*pz4(i)
136 btb33(i) = px3(i)**2 + py3(i)**2 + pz3(i)**2
137 btb34(i) = px3(i)*px4(i) + py3(i)*py4(i) + pz3(i)*pz4(i)
138 btb44(i) = px4(i)**2 + py4(i)**2 + pz4(i)**2
146# include "vectorize.inc"
150 IF (off(i)/=zero)
THEN
153 ntn_unl = (unl(pos1(i)) + unl(pos2(i)) + unl(pos3(i)) + unl(pos4(i))) / ntn
156 ntn_vnl = (vnl(pos1(i)) + vnl(pos2(i)) + vnl(pos3(i)) + vnl(pos4(i))) / ntn
158 ntn_vnl =
min(sqrt(mass(pos1(i))/mass0(pos1(i))),
159 . sqrt(mass(pos2(i))/mass0(pos2(i))),
160 . sqrt(mass(pos3(i))/mass0(pos3(i))),
161 . sqrt(mass(pos4(i))/mass0(pos4(i))))*ntn_vnl
165 b1 = l2 * vol(i) * ( btb11(i)*unl(pos1(i)) + btb12(i)*unl(pos2(i))
166 . + btb13(i)*unl(pos3(i)) + btb14(i)*unl(pos4(i)))
168 b2 = l2 * vol(i) * ( btb12(i)*unl(pos1(i)) + btb22(i)*unl(pos2(i))
169 . + btb23(i)*unl(pos3(i)) + btb24(i)*unl(pos4(i)))
171 b3 = l2 * vol(i) * ( btb13(i)*unl(pos1(i)) + btb23(i)*unl(pos2(i))
172 . + btb33(i)*unl(pos3(i)) + btb34(i)*unl(pos4(i)))
174 b4 = l2 * vol(i) * ( btb14(i)*unl(pos1(i)) + btb24(i)*unl(pos2(i))
175 . + btb34(i)*unl(pos3(i)) + btb44(i)*unl(pos4(i)))
178 ntn_unl = ntn_unl * vol(i)
179 ntn_vnl = ntn_vnl * xi * vol(i)
182 ntvar = var_reg(i)*fourth* vol(i)
185 a = ntn_unl + ntn_vnl - ntvar
193 sti1(i) = (abs(l2*btb11(i) + one/ntn) + abs(l2*btb12(i) + one/ntn) + abs(l2*btb13(i) + one/ntn) +
194 . abs(l2*btb14(i) + one/ntn))* vol(i)
195 sti2(i) = (abs(l2*btb12(i) + one/ntn) + abs(l2*btb22(i) + one/ntn) + abs(l2*btb23(i) + one/ntn) +
196 . abs(l2*btb24(i) + one/ntn))* vol(i)
197 sti3(i) = (abs(l2*btb13(i) + one/ntn) + abs(l2*btb23(i) + one/ntn) + abs(l2*btb33(i) + one/ntn) +
198 . abs(l2*btb34(i) + one/ntn))* vol(i)
199 sti4(i) = (abs(l2*btb14(i) + one/ntn) + abs(l2*btb24(i) + one/ntn) + abs(l2*btb34(i) + one/ntn) +
200 . abs(l2*btb44(i) + one/ntn))* vol(i)
207 lc(i) = vol0(i)**third
211 f1(i) = sqrt(mass(pos1(i))/mass0(pos1(i)))*zeta*sspnl*half*
212 . (vnl(pos1(i))+vnl0(pos1(i)))*(sqrt(three)/four)*(lc(i)**2)
213 f2(i) = sqrt(mass(pos2(i))/mass0(pos2(i)))*zeta*sspnl*half*
214 . (vnl(pos2(i))+vnl0(pos2(i)))*(sqrt(three)/four)*(lc(i)**2)
215 f3(i) = sqrt(mass(pos3(i))/mass0(pos3(i)))*zeta*sspnl*half*
216 . (vnl(pos3(i))+vnl0(pos3(i)))*(sqrt(three)/four)*(lc(i)**2)
217 f4(i) = sqrt(mass(pos4(i))/mass0(pos4(i)))*zeta*sspnl*half*
218 . (vnl(pos4(i))+vnl0(pos4(i)))*(sqrt(three)/four)*(lc(i)**2)
226 f1(i) = zeta*sspnl*half*(vnl(pos1(i))+vnl0(pos1(i)))*(sqrt(three)/four)*(lc(i)**2)
227 f2(i) = zeta*sspnl*half*(vnl(pos2(i))+vnl0(pos2(i)))*(sqrt(three)/four)*(lc(i)**2)
228 f3(i) = zeta*sspnl*half*(vnl(pos3(i))+vnl0(pos3(i)))*(sqrt(three)/four)*(lc(i)**2)
229 f4(i) = zeta*sspnl*half*(vnl(pos4(i))+vnl0(pos4(i)))*(sqrt(three)/four)*(lc(i)**2)
237 IF (iparit == 0)
THEN
238 fnl => nloc_dmg%FNL(1:l_nloc,itask+1)
239 IF (nodadt > 0) stifnl => nloc_dmg%STIFNL(1:l_nloc,itask+1)
242 fnl(pos1(i)) = fnl(pos1(i)) - f1(i)
243 fnl(pos2(i)) = fnl(pos2(i)) - f2(i)
244 fnl(pos3(i)) = fnl(pos3(i)) - f3(i)
245 fnl(pos4(i)) = fnl(pos4(i)) - f4(i)
248 maxstif =
max(sti1(i),sti2(i),sti3(i),sti4(i))
250 stifnl(pos1(i)) = stifnl(pos1(i)) + maxstif
251 stifnl(pos2(i)) = stifnl(pos2(i)) + maxstif
252 stifnl(pos3(i)) = stifnl(pos3(i)) + maxstif
253 stifnl(pos4(i)) = stifnl(pos4(i)) + maxstif
265 maxstif =
max(sti1(i),sti2(i),sti3(i),sti4(i))
268 k = nloc_dmg%IADS(1,ii)
269 nloc_dmg%FSKY(k,1) = -f1(i)
270 IF (nodadt > 0) nloc_dmg%STSKY(k,1) = maxstif
272 k = nloc_dmg%IADS(3,ii)
273 nloc_dmg%FSKY(k,1) = -f2(i)
274 IF (nodadt > 0) nloc_dmg%STSKY(k,1) = maxstif
276 k = nloc_dmg%IADS(6,ii)
277 nloc_dmg%FSKY(k,1) = -f3(i)
278 IF (nodadt > 0) nloc_dmg%STSKY(k,1) = maxstif
280 k = nloc_dmg%IADS(5,ii)
281 nloc_dmg%FSKY(k,1) = -f4(i)
282 IF (nodadt > 0) nloc_dmg%STSKY(k,1) = maxstif
290 IF (nodadt == 0)
THEN
293 IF (off(i)/=zero)
THEN
295 dtnl = (two*(
min(vol(i)**third,le_max))*sqrt(three*zeta))/
296 . sqrt(twelve*l2 + (
min(vol(i)**third,le_max))**2)
298 dt2t =
min(dt2t,dtfac1(1)*cdamp*dtnl)
305 IF (
ALLOCATED(btb11))
DEALLOCATE(btb11)
306 IF (
ALLOCATED(btb12))
DEALLOCATE(btb12)
307 IF (
ALLOCATED(btb13))
DEALLOCATE(btb13)
308 IF (
ALLOCATED(btb14))
DEALLOCATE(btb14)
309 IF (
ALLOCATED(btb22))
DEALLOCATE(btb22)
310 IF (
ALLOCATED(btb23))
DEALLOCATE(btb23)
311 IF (
ALLOCATED(btb24))
DEALLOCATE(btb24)
312 IF (
ALLOCATED(btb33))
DEALLOCATE(btb33)
313 IF (
ALLOCATED(btb34))
DEALLOCATE(btb34)
314 IF (
ALLOCATED(btb44))
DEALLOCATE(btb44)
315 IF (
ALLOCATED(pos1))
DEALLOCATE(pos1)
316 IF (
ALLOCATED(pos2))
DEALLOCATE(pos2)
317 IF (
ALLOCATED(pos3))
DEALLOCATE(pos3)
318 IF (
ALLOCATED(pos4))
DEALLOCATE(pos4)
319 IF (
ALLOCATED(sti1))
DEALLOCATE(sti1)
320 IF (
ALLOCATED(sti2))
DEALLOCATE(sti2)
321 IF (
ALLOCATED(sti3))
DEALLOCATE(sti3)
322 IF (
ALLOCATED(sti4))
DEALLOCATE(sti4)