34 . DT_NL ,X ,XREFTG ,NFT ,
35 . NEL ,NG ,IPM ,BUFMAT ,
46#include "implicit_f.inc"
57 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
58 TYPE (NLOCAL_STR_) ,
TARGET :: NLOC_DMG
59 INTEGER IXTG(NIXTG,*),NFT,NEL,NG,IPM(NPROPMI,*)
60 my_real ,
DIMENSION(NUMELC+NUMELTG),
INTENT(IN) ::
63 . x(3,*),xreftg(3,3,*),dt_nl,bufmat(*),time
68 INTEGER :: IMAT,NDOF,L_NLOC,N1,N2,N3,K,I,NDNOD
69 INTEGER,
DIMENSION(NEL) :: POS1,POS2,POS3
72 . ntvar,z01(11,11),wf1(11,11),zn1(12,11),b1,b2,b3,
73 . nth1,nth2,bth1,bth2,k1,k12,k2,sspnl,le_max
74 my_real,
DIMENSION(:,:),
ALLOCATABLE :: var_reg,vpred
76 .
DIMENSION(:),
POINTER :: fnl,unl,vnl,dnl,mnl,thck
77 my_real,
DIMENSION(NEL) :: x1,x2,x3,y1,y2,y3,
78 . px1,py1,py2,e1x,e2x,e3x,e1y,e2y,e3y,e1z,e2z,e3z,
79 . x2l,y2l,x3l,y3l,z1,z2,z3,surf,x31,y31,z31,offg,
80 . vols,btb11,btb12,btb13,btb22,btb23,btb33
81 TYPE(buf_nloc_),
POINTER :: BUFNL
82 my_real,
DIMENSION(:,:),
POINTER ::
86 1 0. ,0. ,0. ,0. ,0. ,
87 1 0. ,0. ,0. ,0. ,0. ,0. ,
88 2 -.5 ,0.5 ,0. ,0. ,0. ,
89 2 0. ,0. ,0. ,0. ,0. ,0. ,
90 3 -.5 ,0. ,0.5 ,0. ,0. ,
91 3 0. ,0. ,0. ,0. ,0. ,0. ,
92 4 -.5 ,-.1666667,0.1666667,0.5 ,0. ,
93 4 0. ,0. ,0. ,0. ,0. ,0. ,
94 5 -.5 ,-.25 ,0. ,0.25 ,0.5 ,
95 5 0. ,0. ,0. ,0. ,0. ,0. ,
96 6 -.5 ,-.3 ,-.1 ,0.1 ,0.3 ,
97 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
98 7 -.5 ,-.3333333,-.1666667,0.0 ,0.1666667,
99 7 0.3333333,0.5 ,0. ,0. ,0. ,0. ,
100 8 -.5 ,-.3571429,-.2142857,-.0714286,0.0714286,
101 8 0.2142857,0.3571429,0.5 ,0. ,0. ,0. ,
102 9 -.5 ,-.375 ,-.25 ,-.125 ,0.0 ,
103 9 0.125 ,0.25 ,0.375 ,0.5 ,0. ,0. ,
104 a -.5 ,-.3888889,-.2777778,-.1666667,-.0555555,
105 a 0.0555555,0.1666667,0.2777778,0.3888889,0.5 ,0. ,
106 b -.5 ,-.4 ,-.3 ,-.2 ,-.1 ,
107 b 0. ,0.1 ,0.2 ,0.3 ,0.4 ,0.5 /
110 1 1. ,0. ,0. ,0. ,0. ,
111 1 0. ,0. ,0. ,0. ,0. ,0. ,
112 2 0.5 ,0.5 ,0. ,0. ,0. ,
113 2 0. ,0. ,0. ,0. ,0. ,0. ,
114 3 0.25 ,0.5 ,0.25 ,0. ,0. ,
115 3 0. ,0. ,0. ,0. ,0. ,0. ,
116 4 0.1666667,0.3333333,0.3333333,0.1666667,0. ,
117 4 0. ,0. ,0. ,0. ,0. ,0. ,
118 5 0.125 ,0.25 ,0.25 ,0.25 ,0.125 ,
119 5 0. ,0. ,0. ,0. ,0. ,0. ,
120 6 0.1 ,0.2 ,0.2 ,0.2 ,0.2 ,
121 6 0.1 ,0. ,0. ,0. ,0. ,0. ,
122 7 0.0833333,0.1666667,0.1666667,0.1666667,0.1666667,
123 7 0.1666667,0.0833333,0. ,0. ,0. ,0. ,
124 8 0.0714286,0.1428571,0.1428571,0.1428571,0.1428571,
125 8 0.1428571,0.1428571,0.0714286,0. ,0. ,0. ,
126 9 0.0625 ,0.125 ,0.125 ,0.125 ,0.125 ,
127 9 0.125 ,0.125 ,0.125 ,0.0625 ,0. ,0. ,
128 a 0.0555556,0.1111111,0.1111111,0.1111111,0.1111111,
129 a 0.1111111,0.1111111,0.1111111,0.1111111,0.0555556,0. ,
130 b 0.05 ,0.1 ,0.1 ,0.1 ,0.1 ,
131 b 0.1 ,0.1 ,0.1 ,0.1 ,0.1 ,0.05
134 1 0. ,0. ,0. ,0. ,0. ,0. ,
135 1 0. ,0. ,0. ,0. ,0. ,0. ,
136 2 -.5 ,0.5 ,0. ,0. ,0. ,0. ,
137 2 0. ,0. ,0. ,0. ,0. ,0. ,
138 3 -.5 ,-.25 ,0.25 ,0.5 ,0. ,0. ,
139 3 0. ,0. ,0. ,0. ,0. ,0. ,
140 4 -.5 ,-.3333333,0. ,0.3333333,0.5 ,0. ,
141 4 0. ,0. ,0. ,0. ,0. ,0. ,
142 5 -.5 ,-.375 ,-0.125 ,0.125 ,0.375 ,0.5 ,
143 5 0. ,0. ,0. ,0. ,0. ,0. ,
144 6 -.5 ,-.4 ,-.2 ,0.0 ,0.2 ,0.4 ,
145 6 0.5 ,0. ,0. ,0. ,0. ,0. ,
146 7 -.5 ,-.4166667,-.25 ,-.0833333,0.0833333,0.25 ,
147 7 0.4166667,0.5 ,0. ,0. ,0. ,0. ,
148 8 -.5 ,-.4285715,-.2857143,-.1428572,0.0 ,0.1428572,
149 8 0.2857143,0.4285715,0.5 ,0. ,0. ,0. ,
150 9 -.5 ,-.4375 ,-.3125 ,-.1875 ,-.0625 ,0.0625 ,
151 9 0.1875 ,0.3125 ,0.4375 ,0.5 ,0. ,0. ,
152 a -.5 ,-.4444444,-.3333333,-.2222222,-.1111111,0. ,
153 a 0.1111111,0.2222222,0.3333333,0.4444444,0.5 ,0. ,
154 b -.5 ,-.45 ,-.35 ,-.25 ,-.15 ,-.05 ,
155 b 0.05 ,0.15 ,0.25 ,0.35 ,0.45 ,0.5 /
158 l_nloc = nloc_dmg%L_NLOC
160 fnl => nloc_dmg%FNL(1:l_nloc,1)
161 vnl => nloc_dmg%VNL(1:l_nloc)
162 dnl => nloc_dmg%DNL(1:l_nloc)
163 unl => nloc_dmg%UNL(1:l_nloc)
164 mnl => nloc_dmg%MASS(1:l_nloc)
168 le_min = sqrt((four/sqrt(three))*minval(
area(numelc+nft+1:numelc+nft+nel)))
170 ndof = elbuf_tab(ng)%BUFLY(1)%NPTT
172 thck => elbuf_tab(ng)%GBUF%THK(1:nel)
175 le_min =
min(le_min,minval(thck(1:nel))/ndof)
178 len = nloc_dmg%LEN(imat)
180 le_max = nloc_dmg%LE_MAX(imat)
182 damp = nloc_dmg%DAMP(imat)
184 dens = nloc_dmg%DENS(imat)
186 sspnl = nloc_dmg%SSPNL(imat)
188 dt_nl =
min(dt_nl,0.5d0*((two*
min(le_min,le_max)*sqrt(three*dens))/
189 . (sqrt(twelve*(len**2)+(
min(le_min,le_max)**2)))))
193 ALLOCATE(vpred(nel,ndof+1))
196 ALLOCATE(vpred(nel,ndof))
201 IF (.NOT.
ALLOCATED(var_reg))
ALLOCATE(var_reg(nel,ndof))
204# include "vectorize.inc"
208 x1(i)=x(1,ixtg(2,nft+i))
209 y1(i)=x(2,ixtg(2,nft+i))
210 z1(i)=x(3,ixtg(2,nft+i))
211 x2(i)=x(1,ixtg(3,nft+i))
212 y2(i)=x(2,ixtg(3,nft+i))
213 z2(i)=x(3,ixtg(3,nft+i))
214 x3(i)=x(1,ixtg(4,nft+i))
215 y3(i)=x(2,ixtg(4,nft+i))
216 z3(i)=x(3,ixtg(4,nft+i))
218 x1(i)=xreftg(1,1,nft+i)
219 y1(i)=xreftg(1,2,nft+i)
220 z1(i)=xreftg(1,3,nft+i)
221 x2(i)=xreftg(2,1,nft+i)
222 y2(i)=xreftg(2,2,nft+i)
223 z2(i)=xreftg(2,3,nft+i)
224 x3(i)=xreftg(3,1,nft+i)
225 y3(i)=xreftg(3,2,nft+i)
226 z3(i)=xreftg(3,3,nft+i)
230 n1 = nloc_dmg%IDXI(ixtg(2,nft+i))
231 n2 = nloc_dmg%IDXI(ixtg(3,nft+i))
232 n3 = nloc_dmg%IDXI(ixtg(4,nft+i))
234 pos1(i) = nloc_dmg%POSI(n1)
235 pos2(i) = nloc_dmg%POSI(n2)
236 pos3(i) = nloc_dmg%POSI(n3)
242# include "vectorize.inc"
244 var_reg(i,k) = third*(dnl(pos1(i)+k-1)
246 . + dnl(pos3(i)+k-1))
251 . x1 ,x2 ,x3 ,y1 ,y2 ,
253 . e1x ,e2x ,e3x ,e1y ,e2y ,e3y ,
255 . x31 ,y31 ,z31 ,x2l ,x3l ,y3l )
259 . bufmat ,time ,var_reg ,
266# include "vectorize.inc"
270 px1(i) = -half*y3l(i)
271 py1(i) = half*(x3l(i)-x2l(i))
272 py2(i) = -half*x3l(i)
275 btb11(i) = px1(i)**2 + py1(i)**2
276 btb12(i) = -px1(i)**2 + py1(i)*py2(i)
277 btb13(i) = -py1(i)*(py1(i)+py2(i))
278 btb22(i) = px1(i)**2 + py2(i)**2
279 btb23(i) = -py2(i)*(py1(i)+py2(i)
280 btb33(i) = (py1(i)+py2(i))**2
283 vols(i) =
area(numelc+nft+i)*thck(i)
286 offg(i) = elbuf_tab(ng)%GBUF%OFF(i)
293 IF ((ndof > 1).AND.(len>zero))
THEN
296 bufnl => elbuf_tab(ng)%NLOC(1,1)
299 massth => bufnl%MASSTH(1:nel,1:ndnod)
300 unlth => bufnl%UNLTH(1:nel ,1:ndnod)
301 vnlth => bufnl%VNLTH(1:nel ,1:ndnod)
302 fnlth => bufnl%FNLTH(1:nel ,1:ndnod)
307 vpred(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*(dt_nl/two)
321 IF ((ndof==2).AND.(k==2))
THEN
322 nth1 = (z01(k,ndof) - zn1(k,ndof))/(zn1(k-1,ndof) - zn1(k,ndof))
323 nth2 = (z01(k,ndof) - zn1(k-1,ndof)) /(zn1(k,ndof) - zn1(k-1,ndof))
325 nth1 = (z01(k,ndof) - zn1(k+1,ndof))/(zn1(k,ndof) - zn1(k+1,ndof))
326 nth2 = (z01(k,ndof) - zn1(k,ndof)) /(zn1(k+1,ndof) - zn1(k
331 ! computation of b-matrix values
332 IF ((ndof==2).AND.(k==2))
THEN
333 bth1 = (one/(zn1(k-1,ndof) - zn1(k
334 bth2 = (one/(zn1(k,ndof) - zn1(k-1,ndof)))*(one/thck(i))
336 bth1 = (one/(zn1(k,ndof) - zn1(k+1,ndof)))*(one/thck(i))
337 bth2 = (one/(zn1(k+1,ndof) - zn1(k,ndof)))*(one/thck(i))
341 k1 = (len**2)*(bth1**2) + nth1**2
342 k12 = (len**2)*(bth1*bth2)+ (nth1*nth2)
343 k2 = (len**2)*(bth2**2) + nth2**2
346 IF ((ndof==2).AND.(k==2))
THEN
347 fnlth(i,k-1) = fnlth(i,k-1) + (k1*unlth(i,k-1) + k12*unlth(i,k)
348 . + damp*((nth1**2)*vpred(i,k-1)
349 . + (nth1*nth2)*vpred(i,k))
350 . - (nth1*var_reg(i,k)))*vols(i)*wf1(k,ndof)
351 fnlth(i,k) = fnlth(i,k) + (k12*unlth(i,k-1) + k2*unlth(i,k)
352 . + damp*(nth1*nth2*vpred(i,k-1)
353 . + (nth2**2)*vpred(i,k))
354 . - nth2*var_reg(i,k))*vols(i)*wf1(k,ndof)
356 fnlth(i,k) = fnlth(i,k) + (k1*unlth(i,k) + k12*unlth(i,k+1)
357 . + damp*((nth1**2)*vpred(i,k)
358 . + (nth1*nth2)*vpred(i,k+1))
359 . - (nth1*var_reg(i,k)))*vols(i)*wf1(k,ndof)
360 fnlth(i,k+1) = fnlth(i,k+1) + (k12*unlth(i,k) + k2*unlth(i,k+1)
361 . + damp*(nth1*nth2*vpred(i,k)
362 . + (nth2**2)*vpred(i,k+1))
363 . - nth2*var_reg(i,k))*vols(i)*wf1(k,ndof)
371 vnlth(i,k) = vnlth(i,k) - (fnlth(i,k)/massth(i,k))*dt_nl
378 unlth(i,k) = unlth(i,k) + vnlth(i,k)*dt_nl
385 IF ((ndof==2).AND.(k==2))
THEN
386 nth1 = (z01(k,ndof) - zn1(k,ndof))/(zn1(k-1,ndof) - zn1(k,ndof))
387 nth2 = (z01(k,ndof) - zn1(k-1,ndof)) /(zn1(k,ndof) - zn1(k-1,ndof))
389 nth1 = (z01(k,ndof) - zn1(k+1,ndof))/(zn1(k,ndof) - zn1(k+1,ndof))
390 nth2 = (z01(k,ndof) - zn1(k,ndof)) /(zn1(k+1,ndof) - zn1(k,ndof))
395 IF ((ndof==2).AND.(k==2))
THEN
396 var_reg(i,k) = nth1*unlth(i,k-1) + nth2*unlth(i,k)
398 var_reg(i,k) = nth1*unlth(i,k) + nth2*unlth(i,k+1)
411# include "vectorize.inc"
415 IF (offg(i) > zero)
THEN
417 b1 = ((len**2)/vols(i))*wf1(k,ndof)*(btb11(i)*unl(pos1(i)+k-1) + btb12(i)*unl(pos2(i)+k-1)
418 . + btb13(i)*unl(pos3(i)+k-1))
419 b2 = ((len**2)/vols(i))*wf1(k,ndof
420 . + btb23(i)*unl(pos3(i)+k-1))
421 b3 = ((len**2)/vols(i))*wf1(k,ndof)*(btb13(i)*unl(pos1(i)+k-1) + btb23(i)*unl(pos2(i)+k-1)
422 . + btb33(i)*unl(pos3(i)+k-1))
424 ntn_unl = ((unl(pos1(i)+k-1) + unl(pos2(i)+k-1) + unl(pos3(i)+k-1))*third*third)*vols(i)*wf1(k,ndof)
426 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)
428 ntvar = var_reg(i,k)*third*vols(i)*wf1(k,ndof)
430 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) - (ntn_unl + ntn_vnl - ntvar + b1)
431 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) - (ntn_unl + ntn_vnl - ntvar + b2)
432 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) - (ntn_unl + ntn_vnl - ntvar + b3)
435 fnl(pos1(i)+k-1) = fnl(pos1(i)+k-1) -
436 . wf1(k,ndof)*dens*sspnl*vnl(pos1(i)+k-1)*sqrt((four/sqrt(three))*(le_max**2))*thck(i)
437 fnl(pos2(i)+k-1) = fnl(pos2(i)+k-1) -
438 . wf1(k,ndof)*dens*sspnl*vnl(pos2(i)+k-1)*sqrt((four/sqrt(three))*(le_max**2))*thck(i)
439 fnl(pos3(i)+k-1) = fnl(pos3(i)+k-1) -
440 . wf1(k,ndof)*dens*sspnl*vnl(pos3(i)+k-1)*sqrt((four/sqrt(three))*(le_max**2))*thck(i)
445 IF (
ALLOCATED(var_reg))
DEALLOCATE(var_reg)
446 IF (
ALLOCATED(vpred))
DEALLOCATE(vpred)