50
51
52
56 USE intbufdef_mod
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "units_c.inc"
65#include "com04_c.inc"
66#include "scr06_c.inc"
67
68
69
70 INTEGER NMN, NRTM, NSN, I_STOK,IGAP,
71 . INACTI,
72 . IPARTS(*), KNOD2ELS(*), NOD2ELS(*)
73 INTEGER IRECT(4,*),NSV(*),ICODE(*),ISKEW(*)
74 INTEGER MSR(*),IDDLEVEL
75 INTEGER NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*)
76 INTEGER KREMNODE(*),REMNODE(*)
77 INTEGER IXS(*), IXS10(*), IXS16(*), IXS20(*)
78 LOGICAL, INTENT(in) :: FLAG_REMOVED_NODE
79 INTEGER , INTENT(IN) :: IELEM_M(2,NRTM)
80 integer, intent(in) :: nin
81 integer, intent(in) :: npari
82 integer, dimension(npari), intent(inout) :: ipari
83
85 . stf(*),stfn(*),x(3,*),gap_s(*),gap_m(*),
86 . dist,bumult,gap,tzinf,maxbox,minbox,gapmin,gapmax,
87 . gap_s_l(*),gap_m_l(*),marge,gap_n(4,*)
89 . bgapsmx
90 my_real ,
INTENT(IN) :: drad, dgapload
91 INTEGER ID
92 CHARACTER(LEN=NCHARTITLE) :: TITR
93
94 INTEGER , INTENT(IN) :: NRTMT
95 type(intbuf_struct_), intent(inout) :: intbuf_tab
96
97
98
99 INTEGER I, J, L, N1, N2, N3, N4,N_SOL, ESHIFT
100 INTEGER IBID, NELS
101 INTEGER, DIMENSION(:),ALLOCATABLE :: IIX,IIY,IIZ
102
104 . dx1,dy1,dz1,
105 . dx3,dy3,dz3,
106 . dx4,dy4,dz4,
107 . dx6,dy6,dz6,
108 . dd1,dd2,dd3,dd4,dd,dd0,xmin,ymin,zmin,
109 . xmax,
ymax,zmax,tzinf0,minbox0,maxbox0,
110 . bid,tzinf_st,marge_st,dd_st,d_max,pensol,d_moy,
111 . xyzm(6),bminma(6),aaa,ledgmax
113 . DIMENSION(:), ALLOCATABLE :: edge_l2,edge_l2_tmp
114 INTEGER TAGP(NPART),IAD,N,IE,IL,IP
115 INTEGER, DIMENSION(:), ALLOCATABLE :: NPARTNS,IELEM,LPARTNS
116 INTEGER NBX,NBY,NBZ
117 INTEGER, DIMENSION(:), ALLOCATABLE :: IS_LARGE_NODE,LARGE_NODE, TAGNOD,LOCAL_NEXT_NOD
118 INTEGER :: NB_LARGE_NODES
119 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
120 INTEGER (KIND=8) :: IONE,IHUNDRED
121
122 ione=1
123 ihundred=100
124 gapmax=ep30
125 gapmin=zero
126
127
128
129
130
131
132
133
134 dd=zero
135 dd_st=zero
136 pensol=ep30
137 d_moy = zero
138 n_sol = 0
139 DO 10 l=1,nrtm
140
141 n1=irect(1,l)
142 n2=irect(2,l)
143 n3=irect(3,l)
144 n4=irect(4,l)
145
146 dx1=(x(1,n1)-x(1,n2))
147 dy1=(x(2,n1)-x(2,n2))
148 dz1=(x(3,n1)-x(3,n2))
149 dd1=sqrt(dx1**2+dy1**2+dz1**2)
150
151 dx3=(x(1,n1)-x(1,n4))
152 dy3=(x(2,n1)-x(2,n4))
153 dz3=(x(3,n1)-x(3,n4))
154 dd2=sqrt(dx3**2+dy3**2+dz3**2)
155
156 dx4=(x(1,n3)-x(1,n2))
157 dy4=(x(2,n3)-x(2,n2))
158 dz4=(x(3,n3)-x(3,n2))
159 dd3=sqrt(dx4**2+dy4**2+dz4**2)
160
161 dx6=(x(1,n4)-x(1,n3))
162 dy6=(x(2,n4)-x(2,n3))
163 dz6=(x(3,n4)-x(3,n3))
164 dd4=sqrt(dx6**2+dy6**2+dz6**2)
165 dd=dd+ (dd1+dd2+dd3+dd4)
166
167 IF (msegtyp(l)==0.OR.msegtyp(l)>nrtmt) THEN
168 d_max=
max(dd1,dd2,dd3,dd4)
169 d_max=
min(d_max,gap_n(1,l))
170
171 gap_n(1,l)=d_max
172 dd_st=
max(dd_st,d_max)
173 n_sol = n_sol + 1
174 d_moy = d_moy + d_max
175 END IF
176
177 10 CONTINUE
178
179
180 dd0=dd/nrtm/four
181 dd=dd0
182
183 marge = bumult*dd
184
185 tzinf = marge +
max(gap+dgapload,drad)
186
187 marge_st = bmul0*dd
188
189
190 IF(iddlevel==0) marge_st = marge
191 tzinf_st = marge_st +
max(gap+dgapload,drad)
192 bid = four_over_5*dd
193 IF (inacti/=7.AND.tzinf>bid) THEN
194 ibid = nint(tzinf/dd0)
195 ibid =(2*ibid+4)*ibid*2
196 ENDIF
197
198
199 maxbox= half*(dd + 2*tzinf)
200 minbox= half*maxbox
201 tzinf0 = tzinf
202 minbox0 = minbox
203 maxbox0 = maxbox
204
205 dist = zero
206
207
208
209
210 bminma(1)=-ep30
211 bminma(2)=-ep30
212 bminma(3)=-ep30
213 bminma(4)= ep30
214 bminma(5)= ep30
215 bminma(6)= ep30
216
217 xmin=ep30
218 xmax=-ep30
219 ymin=ep30
221 zmin=ep30
222 zmax=-ep30
223
224 DO 20 i=1,nmn
225 j=msr(i)
226 xmin=
min(xmin,x(1,j))
227 ymin=
min(ymin,x(2,j))
228 zmin=
min(zmin,x(3,j))
229 xmax=
max(xmax,x(1,j))
231 zmax=
max(zmax,x(3,j))
232 20 CONTINUE
233
234 xmin=xmin-tzinf_st
235 ymin=ymin-tzinf_st
236 zmin=zmin-tzinf_st
237 xmax=xmax+tzinf_st
239 zmax=zmax+tzinf_st
240
241 DO 25 i=1,nsn
242 j=nsv(i)
243 xmin=
min(xmin,x(1,j))
244 ymin=
min(ymin,x(2,j))
245 zmin=
min(zmin,x(3,j))
246 xmax=
max(xmax,x(1,j))
248 zmax=
max(zmax,x(3,j))
249 25 CONTINUE
250
251 bminma(1) =
max(bminma(1),xmax)
252 bminma(2) =
max(bminma(2),
ymax)
253 bminma(3) =
max(bminma(3),zmax)
254 bminma(4) =
min(bminma(4),xmin)
255 bminma(5) =
min(bminma(5),ymin)
256 bminma(6) =
min(bminma(6),zmin)
257
258 xyzm(1) = bminma(4)
259 xyzm(2) = bminma(5)
260 xyzm(3) = bminma(6)
261 xyzm(4) = bminma(1)
262 xyzm(5) = bminma(2)
263 xyzm(6) = bminma(3)
264
265 aaa = sqrt(nmn /
266 . ((bminma(1)-bminma(4))*(bminma(2)-bminma(5))
267 . +(bminma(2)-bminma(5))*(bminma(3)-bminma(6))
268 . +(bminma(3)-bminma(6))*(bminma(1)-bminma(4))))
269
270 aaa = 0.75*aaa
271
272 nbx = nint(aaa*(bminma(1)-bminma(4)))
273 nby = nint(aaa*(bminma(2)-bminma(5)))
274 nbz = nint(aaa*(bminma(3)-bminma(6)))
278
279 nbx8=nbx
280 nby8=nby
281 nbz8=nbz
282 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
284
285 IF(res8 > lvoxel8) THEN
287 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
288 aaa = aaa**(third)
289 nbx = int((nbx+2)*aaa)-2
290 nby = int((nby+2)*aaa)-2
291 nbz = int((nbz+2)*aaa)-2
295 ENDIF
296
297 nbx8=nbx
298 nby8=nby
299 nbz8=nbz
300 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
301
302 IF(res8 > lvoxel8) THEN
303 nbx =
min(ihundred,
max(nbx8,ione))
304 nby =
min(ihundred,
max(nby8,ione))
305 nbz =
min(ihundred,
max(nbz8,ione))
306 END IF
307
308
309
310
311 ALLOCATE(npartns(nsn+1),ielem(nrtm),edge_l2(nsn))
312
313 npartns(1:nsn+1) = 0
314 ielem(1:nrtm) = 0
315 edge_l2(1:nsn) = zero
316 ledgmax = zero
317
318
319
320
321 nb_large_nodes = 0
322 ALLOCATE(large_node(nsn))
323 ALLOCATE(is_large_node(nsn))
325 is_large_node(1:nsn) = 0
326 large_node(1:nsn) = 0
327 nb_large_nodes = 0
329
330 IF(iddlevel==1)THEN
331
332
333 DO ie=1,nrtm
334
335 IF(ielem_m(1,ie)<=numels) THEN
336 ielem(ie)= ielem_m(1,ie)
337 ELSE
338 CALL insol25(irect ,ixs ,ixs10,ixs16,ixs20,
339 . knod2els ,nod2els ,nels ,ie )
340 ielem(ie)=nels
341 ENDIF
342 END DO
343
344 IF(inacti==5.OR.inacti==-1)THEN
345
346 ALLOCATE(edge_l2_tmp(numnod))
347 edge_l2_tmp(1:numnod)=zero
348 n_sol = 0
349 DO ie=1,nrtm
350 IF(stf(ie)> zero)THEN
351 DO il=1,4
352 n1=irect(il,ie)
353 n2=irect(mod(il,4)+1,ie)
354
355 aaa = (x(1,n2)-x(1,n1))*(x(1,n2)-x(1,n1))
356 . + (x(2,n2)-x(2,n1))*(x(2,n2)-x(2,n1))
357 . + (x(3,n2)-x(3,n1))*(x(3,n2)-x(3,n1))
358 edge_l2_tmp(n1) =
max(edge_l2_tmp(n1), aaa )
359 edge_l2_tmp(n2) =
max(edge_l2_tmp(n2), aaa )
360 IF (msegtyp(ie)==0.OR.msegtyp(ie)>nrtmt) THEN
362 n_sol= n_sol + 1
364 ENDIF
366 n_sol= n_sol + 1
368 ENDIF
369 ENDIF
370 END DO
371 ENDIF
372
373 END DO
374
375
376 DO i=1,nsn
377 n=nsv(i)
378 IF(stfn(i)/=zero) THEN
379 edge_l2(i) = half*sqrt(edge_l2_tmp(n))
380 IF(
tagnod(n)==1) ledgmax=ledgmax+edge_l2(i)
381 END IF
382 END DO
383
384 IF(n_sol > 0) ledgmax=half*ledgmax/n_sol
385
386
387 DEALLOCATE(edge_l2_tmp)
388
389 ENDIF
390
391
392 tagp(1:npart) =0
393
394 DO i=1,nsn
395 n=nsv(i)
396 DO iad=knod2els(n)+1,knod2els(n+1)
397 ie=nod2els(iad)
398 ip=iparts(ie)
399 IF(tagp(ip)==0)THEN
400 npartns(i)=npartns(i)+1
401 tagp(ip) =1
402 END IF
403 END DO
404 DO iad=knod2els(n)+1,knod2els(n+1)
405 ie=nod2els(iad)
406 ip=iparts(ie)
407 tagp(ip) =0
408 END DO
409 END DO
410
411 DO i=1,nsn
412 npartns(i+1) = npartns(i+1) + npartns(i)
413 END DO
414 DO i=nsn,1,-1
415 npartns(i+1) = npartns(i)
416 END DO
417 npartns(1)=0
418
419 ALLOCATE(lpartns(npartns(nsn+1)))
420
421 DO i=1,nsn
422 n=nsv(i)
423 DO iad=knod2els(n)+1,knod2els(n+1)
424 ie=nod2els(iad)
425 ip=iparts(ie)
426 IF(tagp(ip)==0)THEN
427 npartns(i)=npartns(i)+1
428 lpartns(npartns(i))=ip
429 tagp(ip) =1
430 END IF
431 END DO
432 DO iad=knod2els(n)+1,knod2els(n+1)
433 ie=nod2els(iad)
434 ip=iparts(ie)
435 tagp(ip) =0
436 END DO
437 END DO
438
439 DO i=nsn,1,-1
440 npartns(i+1) = npartns(i)
441 END DO
442 npartns(1)=0
443
444
445
446
447 ELSE
448 ALLOCATE(lpartns(0))
449 END IF
450
451
452
453 DO i=
inivoxel,(nbx+2)*(nby+2)*(nbz+2)
455 ENDDO
457
458 eshift=0
459
460 i_stok = 0
461
462 ALLOCATE(local_next_nod(nsn))
463 ALLOCATE(iix(nsn))
464 ALLOCATE(iiy(nsn))
465 ALLOCATE(iiz(nsn))
466
467
469 1 nsn ,irect ,x ,
470 2 stfn ,xyzm ,nsv ,i_stok ,
471 3 eshift ,bgapsmx ,
472 4
voxel1 ,nbx ,nby ,nbz ,nrtm ,
473 5 gap_s ,gap_m ,marge_st,
474 6 nbinflg ,mbinflg ,ilev ,msegtyp ,
475 7 igap ,gap_s_l ,gap_m_l ,edge_l2 ,ledgmax ,
476 8 kremnode,remnode,
477 9 iparts ,npartns ,lpartns ,ielem ,icode ,
478 a iskew ,drad, is_large_node, large_node, nb_large_nodes,
479 b dgapload,nrtmt,flag_removed_node,
480 c ielem_m,local_next_nod,iix,iiy,iiz,
481 d intbuf_tab,ipari,nin)
482
483 DEALLOCATE(local_next_nod)
484 DEALLOCATE(iix)
485 DEALLOCATE(iiy)
486 DEALLOCATE(iiz)
487
488 DEALLOCATE(edge_l2,npartns,ielem,lpartns)
489 DEALLOCATE(is_large_node,large_node,
tagnod)
490
491 IF(nsn/=0)THEN
492 WRITE(iout,*)' POSSIBLE IMPACT NUMBER, NSN:',i_stok,nsn
493
494 ELSE
496 . msgtype=msgwarning,
497 . anmode=aninfo_blind_2,
499 . c1=titr)
500 ENDIF
501
502 RETURN
subroutine insol25(irect, ixs, ixs10, ixs16, ixs20, knod2els, nod2els, nel, i)
subroutine i25trivox1(nsn, irect, x, stfn, xyzm, nsv, ii_stok, eshift, bgapsmx, voxel, nbx, nby, nbz, nrtm, gap_s, gap_m, marge, nbinflg, mbinflg, ilev, msegtyp, igap, gap_s_l, gap_m_l, edge_l2, ledgmax, kremnode, remnode, iparts, npartns, lpartns, ielem, icode, iskew, drad, is_large_node, large_node, nb_large_nodes, dgapload, nrtmt, flag_removed_node, ielem_m, local_next_nod, iix, iiy, iiz, intbuf_tab, ipari, nin)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
integer, dimension(lvoxel) voxel1
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)