47
48
49
54 use intbufdef_mod
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "mvsiz_p.inc"
63
64
65
66#include "units_c.inc"
67#include "com01_c.inc"
68#include "com04_c.inc"
69#include "vect07_c.inc"
70#include "scr06_c.inc"
71
72
73
74 INTEGER NMN, NRTM, NSN, NOINT,I_STOK,MULTIMP,ISTF,IGAP,
75 . INACTI,I_MEM,NIN,IREMNODE,FLAGREMNODE
76 INTEGER IRECT(4,*),NSV(*),NSEG(*),MWA(*)
77 INTEGER MSR(*),IDDLEVEL
78 INTEGER ITAB(*),NCONT,ICURV,KREMNODE(*),REMNODE(*)
80 . stf(*),stfn(*),x(3,*),xyzm(6,2),gap_s(*),gap_m(*),
81 . dist,bumult,gap,tzinf,gapmin,gapmax,
82 . gap_s_l(*),gap_m_l(*),bgapsmx, drad
83 my_real ,
INTENT(IN) :: dgapload
84 INTEGER ID
85 CHARACTER(LEN=NCHARTITLE) :: TITR
86 TYPE(INTERSURFP) :: INTERCEP(3,NINTER)
87 integer, intent(in) ::
88 integer, dimension(npari), intent(inout) :: ipari
89 type(intbuf_struct_), intent(inout) :: intbuf_tab
90 LOGICAL,INTENT(IN) :: IS_USED_WITH_LAW151
91
92
93
94 INTEGER NRTM_L
95 INTEGER, DIMENSION(:), ALLOCATABLE ::
96 INTEGER NBX,NBY,NBZ
97 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
98 INTEGER I, J, K, I_ADD, L, LOC_PROC, N, ISZNSNR,
99 . N1, N2, N3, N4, NCONTACT,I_BID,I_STOK_OLD,
100 . IX1,IY1,IZ1,IX2,IY2,IZ2,IX,IY,IZ
102 . marge, aaa,tzinf_st,marge_st
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_m,ymax_m,zmax_m,xmin_m,ymin_m,zmin_m,
110 . xmax_s,ymax_s,zmax_s,xmin_s,ymin_s,zmin_s,
111 . xmax,
ymax,zmax,xxx,yyy,zzz,
112 . xminb, yminb, zminb, xmaxb, ymaxb, zmaxb,
113 . mean_x, mean_y, mean_z, dev_x, dev_y, dev_z,
114 . gapv(mvsiz),c_max,
115 . tstart,tstop,
116 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,
117 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4
118 my_real,
DIMENSION(:),
ALLOCATABLE :: curv_max
119 INTEGER, DIMENSION(:),ALLOCATABLE :: IIX,IIY,IIZ,LOCAL_NEXT_NOD
120
121 LOGICAL :: TYPE18
122 INTEGER (KIND=8) :: IONE,IHUNDRED
123
124
125
126 ione=1
127 ihundred=100
128
129 ALLOCATE( index(nrtm) )
130 ALLOCATE( curv_max(nrtm) )
131 ALLOCATE(local_next_nod(nsn))
132 ALLOCATE(iix(nsn))
133 ALLOCATE(iiy(nsn))
134 ALLOCATE(iiz(nsn))
135 type18=.false.
136 IF(inacti==7)type18=.true.
137
138 mwa(1:numnod+numfakenodigeo) = 0
139 ncontact = multimp * ncont
140 c_max = zero
141 IF(icurv/=0)THEN
142 DO i=1,nrtm
143 xxx=
max(x(1,irect(1,i)),x(1,irect(2,i)),
144 . x(1,irect(3,i)),x(1,irect(4,i)))
145 . -
min(x(1,irect(1,i)),x(1,irect(2,i)),
146 . x(1,irect(3,i)),x(1,irect(4,i)))
147 yyy=
max(x(2,irect(1,i)),x(2,irect(2,i)),
148 . x(2,irect(3,i)),x(2,irect(4,i)))
149 . -
min(x(2,irect(1,i)),x(2,irect(2,i)),
150 . x(2,irect(3,i)),x(2,irect(4,i)))
151 zzz=
max(x(3,irect(1,i)),x(3,irect(2,i)),
152 . x(3,irect(3,i)),x(3,irect(4,i)))
153 . -
min(x(3,irect(1,i)),x(3,irect(2,i)),
154 . x(3,irect(3,i)),x(3,irect(4,i)))
155 curv_max(i) = half *
max(xxx,yyy,zzz)
156 c_max =
max(c_max,curv_max(i))
157 ENDDO
158 ELSE
159 DO i=1,nrtm
160 curv_max(i)=zero
161 ENDDO
162 ENDIF
163
164 dd=zero
165 DO 10 l=1,nrtm
166
167 n1=irect(1,l)
168 n2=irect(2,l)
169 n3=irect(3,l)
170 n4=irect(4,l)
171
172 dx1=(x(1,n1)-x(1,n2))
173 dy1=(x(2,n1)-x(2,n2))
174 dz1=(x(3,n1)-x(3,n2))
175 dd1=sqrt(dx1**2+dy1**2+dz1**2)
176
177 dx3=(x(1,n1)-x(1,n4))
178 dy3=(x(2,n1)-x(2,n4))
179 dz3=(x(3,n1)-x(3,n4))
180 dd2=sqrt(dx3**2+dy3**2+dz3**2)
181
182 dx4=(x(1,n3)-x(1,n2))
183 dy4=(x(2,n3)-x(2,n2))
184 dz4=(x(3,n3)-x(3,n2))
185 dd3=sqrt(dx4**2+dy4**2+dz4**2)
186
187 dx6=(x(1,n4)-x(1,n3))
188 dy6=(x(2,n4)-x(2,n3))
189 dz6=(x(3,n4)-x(3,n3))
190 dd4=sqrt(dx6**2+dy6**2+dz6**2)
191 dd=dd+ (dd1+dd2+dd3+dd4)
192 10 CONTINUE
193 dd0=dd/nrtm/four
194 dd =dd0
195
196
197
198
199
200
201 marge = bumult*dd
202 tzinf = marge +
max(gap+dgapload,drad)
203
204 marge_st = bmul0*dd
205
206
207 IF(iddlevel==0) marge_st = marge
208 tzinf_st = marge_st +
max(gap+dgapload,drad)
209
210 dist = zero
211
212
213
214 xmax_m=-ep30
215 ymax_m=-ep30
216 zmax_m=-ep30
217 xmin_m=ep30
218 ymin_m=ep30
219 zmin_m=ep30
220 100 CONTINUE
221 i_stok = 0
222 i_mem = 0
223
224 DO loc_proc=1,nspmd
225 nrtm_l=0
226 DO i=1,nrtm
227 IF(intercep(1,nin)%P(i)==loc_proc)THEN
228 nrtm_l=nrtm_l+1
229 index(nrtm_l)=i
230 END IF
231 END DO
232
233
234
235 IF(nrtm_l == 0)cycle
236 mean_x=zero
237 mean_y=zero
238 mean_z=zero
239 DO k=1,nrtm_l
240 i = index(k)
241 j=irect(1,i)
242 xmax_m=
max(xmax_m,x(1,j))
243 ymax_m=
max(ymax_m,x(2,j))
244 zmax_m=
max(zmax_m,x(3,j))
245 xmin_m=
min(xmin_m,x(1,j))
246 ymin_m=
min(ymin_m,x(2,j))
247 zmin_m=
min(zmin_m,x(3,j))
248 mean_x=mean_x+x(1,j)
249 mean_y=mean_y+x(2,j)
250 mean_z=mean_z+x(3,j)
251 j=irect(2,i)
252 xmax_m=
max(xmax_m,x(1,j))
253 ymax_m=
max(ymax_m,x(2,j))
254 zmax_m=
max(zmax_m,x(3,j))
255 xmin_m=
min(xmin_m,x(1,j))
256 ymin_m=
min(ymin_m,x(2,j))
257 zmin_m=
min(zmin_m,x(3,j))
258 mean_x=mean_x+x(1,j)
259 mean_y=mean_y+x(2,j)
260 mean_z=mean_z+x(3,j)
261 j=irect(3,i)
262 xmax_m=
max(xmax_m,x(1,j))
263 ymax_m=
max(ymax_m,x(2,j))
264 zmax_m=
max(zmax_m,x(3,j))
265 xmin_m=
min(xmin_m,x(1,j))
266 ymin_m=
min(ymin_m,x(2,j))
267 zmin_m=
min(zmin_m,x(3,j))
268 mean_x=mean_x+x(1,j)
269 mean_y=mean_y+x(2,j)
270 mean_z=mean_z+x(3,j)
271 j=irect(4,i)
272 xmax_m=
max(xmax_m,x(1,j))
273 ymax_m=
max(ymax_m,x(2,j))
274 zmax_m=
max(zmax_m,x(3,j))
275 xmin_m=
min(xmin_m,x(1,j))
276 ymin_m=
min(ymin_m,x(2,j))
277 zmin_m=
min(zmin_m,x(3,j))
278 mean_x=mean_x+x(1,j)
279 mean_y=mean_y+x(2,j)
280 mean_z=mean_z+x(3,j)
281 END DO
282
283
284 xmin=xmin_m-tzinf_st
285 ymin=ymin_m-tzinf_st
286 zmin=zmin_m-tzinf_st
287 xmax=xmax_m+tzinf_st
289 zmax=zmax_m+tzinf_st
290
291
292
293 mean_x=mean_x/
max((4*nrtm_l),1)
294 mean_y=mean_y/
max((4*nrtm_l),1)
295 mean_z=mean_z/
max((4*nrtm_l),1)
296
297 dev_x=zero
298 dev_y=zero
299 dev_z=zero
304 DO k=1,nrtm_l
305 i = index(k)
306 n1 = irect(1,i)
307 n2 = irect(2,i)
308 n3 = irect(3,i)
309 n4 = irect(4,i)
310 xx1=x(1,n1)
311 xx2=x(1,n2)
312 xx3=x(1,n3)
313 xx4=x(1,n4)
314 xmaxe=
max(xx1,xx2,xx3,xx4)
315 xmine=
min(xx1,xx2,xx3,xx4)
316 dev_x=dev_x+(xx1-mean_x)**2+(xx2-mean_x)**2
317 . +(xx3-mean_x)**2+(xx4-mean_x)**2
318 yy1=x(2,n1)
319 yy2=x(2,n2)
320 yy3=x(2,n3)
321 yy4=x(2,n4)
322 ymaxe=
max(yy1,yy2,yy3,yy4)
323 ymine=
min(yy1,yy2,yy3,yy4)
324 dev_y=dev_y+(yy1-mean_y)**2+(yy2-mean_y)**2
325 . +(yy3-mean_y)**2+(yy4-mean_y)**2
326 zz1=x(3,n1)
327 zz2=x(3,n2)
328 zz3=x(3,n3)
329 zz4=x(3,n4)
330 zmaxe=
max(zz1,zz2,zz3,zz4)
331 zmine=
min(zz1,zz2,zz3,zz4)
332 dev_z=dev_z+(zz1-mean_z)**2+(zz2-mean_z)**2
333 . +(zz3-mean_z)**2+(zz4-mean_z)**2
334
335
336
337 ix1=int(nbx*(xmine-tzinf_st-xmin)/(xmax-xmin))
338 iy1=int(nby*(ymine-tzinf_st-ymin)/(
ymax-ymin))
339 iz1=int(nbz*(zmine-tzinf_st-zmin)/(zmax-zmin))
343 ix2=int(nbx*(xmaxe+tzinf_st-xmin)/(xmax-xmin))
344 iy2=int(nby*(ymaxe+tzinf_st-ymin)/(
ymax-ymin))
345 iz2=int(nbz*(zmaxe+tzinf_st-zmin)/(zmax-zmin))
349
350 DO iz = iz1, iz2
351 DO iy = iy1, iy2
352 DO ix = ix1, ix2
354 END DO
355 END DO
356 END DO
357
358 END DO
359 dev_x=sqrt(dev_x/
max(4*nrtm_l,1))
360 dev_y=sqrt(dev_y/
max(4*nrtm_l,1))
361 dev_z=sqrt(dev_z/
max(4*nrtm_l,1))
362
363 xminb=
max(mean_x-2*dev_x,xmin)
364 yminb=
max(mean_y-2*dev_y,ymin)
365 zminb=
max(mean_z-2*dev_z,zmin)
366 xmaxb=
min(mean_x+2*dev_x,xmax)
368 zmaxb=
min(mean_z+2*dev_z,zmax)
369
370 IF(abs(xminb-xmaxb) < em10)THEN
371 xminb=xmin
372 xmaxb=xmax
373 END IF
374 IF(abs(yminb-ymaxb) < em10)THEN
375 yminb=ymin
377 END IF
378 IF(abs(zminb-zmaxb) < em10)THEN
379 zminb=zmin
380 zmaxb=zmax
381 END IF
382
383 xyzm(1,1) = xmin
384 xyzm(2,1) = ymin
385 xyzm(3,1) = zmin
386 xyzm(4,1) = xmax
388 xyzm(6,1) = zmax
389 xyzm(1,2) = xminb
390 xyzm(2,2) = yminb
391 xyzm(3,2) = zminb
392 xyzm(4,2) = xmaxb
393 xyzm(5,2) = ymaxb
394 xyzm(6,2) = zmaxb
395
396 aaa = sqrt(nmn /
397 . ((xmaxb-xminb)*(ymaxb-yminb)
398 . +(ymaxb-yminb)*(zmaxb-zminb)
399 . +(zmaxb-zminb)*(xmaxb-xminb)))
400 aaa = 0.75*aaa
401
402 nbx = nint(aaa*(xmaxb-xminb))
403 nby = nint(aaa*(ymaxb-yminb))
404 nbz = nint(aaa*(zmaxb-zminb))
408
409 nbx8=nbx
410 nby8=nby
411 nbz8=nbz
412 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
414
415 IF(res8 > lvoxel8) THEN
417 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
418 aaa = aaa**(third)
419 nbx = int((nbx+2)*aaa)-2
420 nby = int((nby+2)*aaa)-2
421 nbz = int((nbz+2)*aaa)-2
425 ENDIF
426
427 nbx8=nbx
428 nby8=nby
429 nbz8=nbz
430 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
431
432 IF(res8 > lvoxel8) THEN
433 nbx =
min(ihundred,
max(nbx8,ione))
434 nby =
min(ihundred,
max(nby8,ione))
435 nbz =
min(ihundred,
max(nbz8,ione))
436 ENDIF
437
438
439 DO i=
inivoxel,(nbx+2)*(nby+2)*(nbz+2)
441 ENDDO
443
444 200 CONTINUE
445
446
448 1 nsn ,i_mem ,irect ,x ,stf ,
449 2 stfn ,xyzm ,nsv ,
450 3 ncontact ,noint ,tzinf_st ,gap_s_l ,gap_m_l ,
451 4
voxel1 ,nbx ,nby ,nbz ,nrtm_l ,
452 5 igap ,gap ,gap_s ,gap_m ,gapmin ,
453 6 gapmax ,marge_st,curv_max ,bgapsmx ,istf ,
454 7 i_stok ,nin,
455 8
id ,titr ,drad ,index ,
456 9 iremnode,flagremnode,kremnode,remnode,
457 1 dgapload,ipari,intbuf_tab,
458 2 iix,iiy,iiz,local_next_nod,nrtm,is_used_with_law151 )
459
460
461
462 IF (i_mem == 2)THEN
463 RETURN
464 ENDIF
465
466
467 IF(i_mem==1)THEN
468 i_mem = 0
469 GO TO 100
470 ELSE IF(i_mem==2) THEN
471 marge_st = three_over_4*marge_st
472 tzinf_st = marge_st +
max(gap,drad)
473 i_mem = 0
474 IF(marge_st<em03) THEN
476 . msgtype=msgerror,
477 . anmode=aninfo,
479 . c1=titr)
480 ENDIF
481 GO TO 100
482 ENDIF
483
484 END DO
485
486 IF(.NOT.type18)THEN
487 IF(nsn/=0)THEN
488 WRITE(iout,*)' POSSIBLE IMPACT NUMBER:',i_stok,' (<=',
489 . 1+(i_stok-1)/nsn,'*NSN)'
490
491
492 ELSE
494 . msgtype=msgwarning,
495 . anmode=aninfo_blind_2,
497 . c1=titr)
498 ENDIF
499 endif
500
501 DEALLOCATE( index )
502 DEALLOCATE( curv_max )
503 DEALLOCATE(local_next_nod)
504 DEALLOCATE(iix)
505 DEALLOCATE(iiy)
506 DEALLOCATE(iiz)
507 RETURN
subroutine i7trivox1(nsn, i_mem, irect, x, stf, stfn, xyzm, nsv, mulnsn, noint, tzinf, gap_s_l, gap_m_l, voxel, nbx, nby, nbz, nrtm_l, igap, gap, gap_s, gap_m, gapmin, gapmax, marge, curv_max, bgapsmx, istf, i_stok, nin, id, titr, drad, index, iremnode, flagremnode, kremnode, remnode, dgapload, ipari, intbuf_tab, iix, iiy, iiz, local_next_nod, nrtm, is_used_with_law151)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
integer, dimension(lvoxel) voxel1
integer, dimension(0:lrvoxel, 0:lrvoxel) crvoxel
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)