38 1 X ,IRECT,NSV ,BUMULT,NSEG ,
39 2 NMN ,NRTM ,MWA ,NSN ,
40 3 GAP ,XYZM ,NOINT ,I_STOK ,
42 5 STF ,STFN ,MULTIMP,ISTF ,IDDLEVEL,
43 6 ITAB ,GAP_S,GAP_M ,IGAP ,GAPMIN ,
44 7 GAPMAX,INACTI,GAP_S_L,GAP_M_L,I_MEM ,
45 8 NCONT ,ICURV ,BGAPSMX,ID, TITR,
47 1 IREMNODE,FLAGREMNODE,KREMNODE,REMNODE,
48 2 DGAPLOAD,npari,ipari,intbuf_tab,IS_USED_WITH_LAW151)
57 use margin_reduction_mod ,
only : margin_reduction
61#include "implicit_f.inc"
72#include "vect07_c.inc"
77 INTEGER NMN, NRTM, NSN, NOINT,I_STOK,MULTIMP,ISTF,IGAP
79INTEGER IRECT(4,*),NSV(*),NSEG(*),MWA(*)
80 INTEGER MSR(*),IDDLEVEL
81 INTEGER ITAB(*),NCONT,ICURV,KREMNODE(*),REMNODE(*)
83 . STF(*),STFN(*),X(3,*),XYZM(6,2),GAP_S(*),GAP_M(*),
84 . DIST,BUMULT,GAP,TZINF,GAPMIN,GAPMAX,
85 . GAP_S_L(*),GAP_M_L(*),BGAPSMX, DRAD
86 my_real ,
INTENT(IN) :: DGAPLOAD
88 CHARACTER(LEN=NCHARTITLE) :: TITR
89 TYPE(INTERSURFP) :: INTERCEP(3,NINTER)
90 integer,
intent(in) :: npari
91 integer,
dimension(npari),
intent(inout) :: ipari
92 type(intbuf_struct_),
intent(inout) :: intbuf_tab
93 LOGICAL,
INTENT(IN) :: IS_USED_WITH_LAW151
98 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX
100 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
101 INTEGER I, J, K, I_ADD, L, LOC_PROC, N, ISZNSNR,
102 . n1, n2, n3, n4, ncontact,i_bid,i_stok_old,
103 . ix1,iy1,iz1,ix2,iy2,iz2,ix,iy,iz
105 . marge, aaa,tzinf_st,marge_st
111 . dd1,dd2,dd3,dd4,dd,dd0,xmin,ymin,zmin,
112 . xmax_m,ymax_m,zmax_m,xmin_m,ymin_m,zmin_m,
113 . xmax_s,ymax_s,zmax_s,xmin_s,ymin_s,zmin_s,
114 . xmax,
ymax,zmax,xxx,yyy,zzz,
115 . xminb, yminb, zminb, xmaxb, ymaxb, zmaxb,
116 . mean_x, mean_y, mean_z, dev_x, dev_y, dev_z,
119 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,
120 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4
121 my_real,
DIMENSION(:),
ALLOCATABLE
122 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ,LOCAL_NEXT_NOD
125 INTEGER (KIND=8) :: IONE,IHUNDRED
132 ALLOCATE( index(nrtm) )
133 ALLOCATE( curv_max(nrtm) )
139 IF(inacti==7)type18=.true.
141 mwa(1:numnod+numfakenodigeo) = 0
142 ncontact = multimp * ncont
146 xxx=
max(x(1,irect(1,i)),x(1,irect(2,i)),
147 . x(1,irect(3,i)),x(1,irect(4,i)))
148 . -
min(x(1,irect(1,i)),x(1,irect(2,i)),
149 . x(1,irect(3,i)),x(1,irect(4,i)))
150 yyy=
max(x(2,irect(1,i)),x(2,irect(2,i)),
151 . x(2,irect(3,i)),x(2,irect(4,i)))
152 . -
min(x(2,irect(1,i)),x(2,irect(2,i)),
153 . x(2,irect(3,i)),x(2,irect(4,i)))
154 zzz=
max(x(3,irect(1,i)),x(3,irect(2,i)),
155 . x(3,irect(3,i)),x(3,irect(4,i)))
156 . -
min(x(3,irect(1,i)),x(3,irect(2,i)),
157 . x(3,irect(3,i)),x(3,irect(4,i)))
158 curv_max(i) = half *
max(xxx,yyy,zzz)
159 c_max =
max(c_max,curv_max(i))
175 dx1=(x(1,n1)-x(1,n2))
176 dy1=(x(2,n1)-x(2,n2))
177 dz1=(x(3,n1)-x(3,n2))
178 dd1=sqrt(dx1**2+dy1**2+dz1**2)
180 dx3=(x(1,n1)-x(1,n4))
181 dy3=(x(2,n1)-x(2,n4))
182 dz3=(x(3,n1)-x(3,n4))
183 dd2=sqrt(dx3**2+dy3**2+dz3**2)
185 dx4=(x(1,n3)-x(1,n2))
186 dy4=(x(2,n3)-x(2,n2))
187 dz4=(x(3,n3)-x(3,n2))
188 dd3=sqrt(dx4**2+dy4**2+dz4**2)
190 dx6=(x(1,n4)-x(1,n3))
191 dy6=(x(2,n4)-x(2,n3))
192 dz6=(x(3,n4)-x(3,n3))
193 dd4=sqrt(dx6**2+dy6**2+dz6**2)
194 dd=dd+ (dd1+dd2+dd3+dd4)
197 IF(nrtm >0 .AND. nrtm <= 3 .AND. .not. is_used_with_law151)
THEN
198 call margin_reduction(x,numnod,irect,nrtm,nsv,nsn,drad,gap,dgapload,bumult,stfn,dd0)
208 tzinf = marge +
max(gap+dgapload,drad)
213 IF(iddlevel==0) marge_st = marge
214 tzinf_st = marge_st +
max(gap+dgapload,drad)
233 IF(intercep(1,nin)%P(i)==loc_proc)
THEN
248 xmax_m=
max(xmax_m,x(1,j))
249 ymax_m=
max(ymax_m,x(2,j))
250 zmax_m=
max(zmax_m,x(3,j))
251 xmin_m=
min(xmin_m,x(1,j))
252 ymin_m=
min(ymin_m,x(2,j))
253 zmin_m=
min(zmin_m,x(3,j))
258 xmax_m=
max(xmax_m,x(1,j))
259 ymax_m=
max(ymax_m,x(2,j))
260 zmax_m=
max(zmax_m,x(3,j))
261 xmin_m=
min(xmin_m,x(1,j))
262 ymin_m=
min(ymin_m,x(2,j))
263 zmin_m=
min(zmin_m,x(3,j))
268 xmax_m=
max(xmax_m,x(1,j))
269 ymax_m=
max(ymax_m,x(2,j))
270 zmax_m=
max(zmax_m,x(3,j))
271 xmin_m=
min(xmin_m,x(1,j))
272 ymin_m=
min(ymin_m,x(2,j))
273 zmin_m=
min(zmin_m,x(3,j))
278 xmax_m=
max(xmax_m,x(1,j))
279 ymax_m=
max(ymax_m,x(2,j))
280 zmax_m=
max(zmax_m,x(3,j))
281 xmin_m=
min(xmin_m,x(1,j))
282 ymin_m=
min(ymin_m,x(2,j))
283 zmin_m=
min(zmin_m,x(3,j))
299 mean_x=mean_x/
max((4*nrtm_l),1)
300 mean_y=mean_y/
max((4*nrtm_l),1)
301 mean_z=mean_z/
max((4*nrtm_l),1)
320 xmaxe=
max(xx1,xx2,xx3,xx4)
321 xmine=
min(xx1,xx2,xx3,xx4)
322 dev_x=dev_x+(xx1-mean_x)**2+(xx2-mean_x)**2
323 . +(xx3-mean_x)**2+(xx4-mean_x)**2
328 ymaxe=
max(yy1,yy2,yy3,yy4)
329 ymine=
min(yy1,yy2,yy3,yy4)
330 dev_y=dev_y+(yy1-mean_y)**2+(yy2-mean_y)**2
331 . +(yy3-mean_y)**2+(yy4-mean_y)**2
336 zmaxe=
max(zz1,zz2,zz3,zz4)
337 zmine=
min(zz1,zz2,zz3,zz4)
338 dev_z=dev_z+(zz1-mean_z)**2+(zz2-mean_z)**2
339 . +(zz3-mean_z)**2+(zz4-mean_z)**2
343 ix1=int(nbx*(xmine-tzinf_st-xmin)/(xmax-xmin))
344 iy1=int(nby*(ymine-tzinf_st-ymin)/(
ymax-ymin))
345 iz1=int(nbz*(zmine-tzinf_st-zmin)/(zmax-zmin))
349 ix2=int(nbx*(xmaxe+tzinf_st-xmin)/(xmax-xmin))
350 iy2=int(nby*(ymaxe+tzinf_st-ymin)/(
ymax-ymin))
351 iz2=int(nbz*(zmaxe+tzinf_st-zmin
365 dev_x=sqrt(dev_x/
max(4*nrtm_l,1))
366 dev_y=sqrt(dev_y/
max(4*nrtm_l,1))
367 dev_z=sqrt(dev_z/
max(4*nrtm_l,1))
369 xminb=
max(mean_x-2*dev_x,xmin)
370 yminb=
max(mean_y-2*dev_y,ymin)
371 zminb=
max(mean_z-2*dev_z,zmin)
372 xmaxb=
min(mean_x+2*dev_x,xmax)
374 zmaxb=
min(mean_z+2*dev_z,zmax)
376 IF(abs(xminb-xmaxb) < em10)
THEN
380 IF(abs(yminb-ymaxb) < em10)
THEN
384 IF(abs(zminb-zmaxb) < em10)
THEN
403 . ((xmaxb-xminb)*(ymaxb-yminb)
404 . +(ymaxb-yminb)*(zmaxb-zminb)
405 . +(zmaxb-zminb)*(xmaxb-xminb)))
408 nbx = nint(aaa*(xmaxb-xminb))
409 nby = nint(aaa*(ymaxb-yminb))
410 nbz = nint(aaa*(zmaxb-zminb))
418 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
421 IF(res8 > lvoxel8)
THEN
423 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
425 nbx = int((nbx+2)*aaa)-2
426 nby = int((nby+2)*aaa)-2
427 nbz = int((nbz+2)*aaa)-2
436 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
438 IF(res8 > lvoxel8)
THEN
439 nbx =
min(ihundred,
max(nbx8,ione))
440 nby =
min(ihundred,
max(nby8,ione))
441 nbz =
min(ihundred,
max(nbz8,ione))
445 DO i=
inivoxel,(nbx+2)*(nby+2)*(nbz+2)
454 1 nsn ,i_mem ,irect ,x ,stf ,
456 3 ncontact ,noint ,tzinf_st ,gap_s_l ,gap_m_l ,
457 4
voxel1 ,nbx ,nby ,nbz ,nrtm_l ,
458 5 igap ,gap ,gap_s ,gap_m ,gapmin ,
459 6 gapmax ,marge_st,curv_max ,bgapsmx ,istf ,
461 8 id ,titr ,drad ,index ,
462 9 iremnode,flagremnode,kremnode,remnode,
463 1 dgapload,ipari,intbuf_tab,
464 2 iix,iiy,iiz,local_next_nod,nrtm,is_used_with_law151 )
476 ELSE IF(i_mem==2)
THEN
477 marge_st = three_over_4*marge_st
478 tzinf_st = marge_st +
max(gap,drad)
480 IF(marge_st<em03)
THEN
494 WRITE(iout,*)
' POSSIBLE IMPACT NUMBER:',i_stok,
' (<=',
495 . 1+(i_stok-1)/nsn,
'*NSN)'
500 . msgtype=msgwarning,
501 . anmode=aninfo_blind_2,
508 DEALLOCATE( curv_max )
509 DEALLOCATE(local_next_nod)
subroutine i7buc_vox1(x, irect, nsv, bumult, nseg, nmn, nrtm, mwa, nsn, gap, xyzm, noint, i_stok, dist, tzinf, msr, stf, stfn, multimp, istf, iddlevel, itab, gap_s, gap_m, igap, gapmin, gapmax, inacti, gap_s_l, gap_m_l, i_mem, ncont, icurv, bgapsmx, id, titr, drad, intercep, nin, iremnode, flagremnode, kremnode, remnode, dgapload, npari, ipari, intbuf_tab, is_used_with_law151)
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 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)