38 1 X ,IRECT,NSV ,BUMULT,
39 2 NMN ,NRTM ,NSN ,INTBUF_TAB ,
41 4 DIST ,TZINF,MAXBOX ,MINBOX,MSR ,
42 5 STF ,STFN ,IDDLEVEL,
43 6 GAP_S,GAP_M ,IGAP ,GAPMIN ,
44 7 GAPMAX,INACTI,GAP_S_L,GAP_M_L,
45 8 MARGE ,ID ,TITR ,NBINFLG,MBINFLG,
46 9 ILEV ,MSEGTYP,GAP_N,BGAPSMX,
47 A IPARTS,KNOD2ELS,NOD2ELS,
49 C IXS, IXS10, IXS16, IXS20,ICODE,ISKEW ,
50 D DRAD ,DGAPLOAD,NRTMT,FLAG_REMOVED_NODE,
51 E IELEM_M,nin,npari,ipari )
59 use margin_reduction_mod
63#include "implicit_f.inc"
73 INTEGER NMN, NRTM, NSN, I_STOK,IGAP,
75 . IPARTS(*), KNOD2ELS(*), NOD2ELS(*)
76 INTEGER IRECT(4,*),NSV(*),ICODE(*),ISKEW(*)
78 INTEGER NBINFLG(*),MBINFLG(*),ILEV,MSEGTYP(*)
79 INTEGER KREMNODE(*),REMNODE(*)
80 INTEGER IXS(*), IXS10(*), IXS16(*), (*)
81 LOGICAL,
INTENT(in) :: FLAG_REMOVED_NODE
82 INTEGER,
INTENT(IN) :: IELEM_M(2,NRTM)
83 integer,
intent(in) :: nin
84 integer,
intent(in) :: npari
85 integer,
dimension(npari),
intent(inout) :: ipari
88 . stf(*),stfn(*),x(3,*),gap_s(*),gap_m(*),
89 . dist,bumult,gap,tzinf,maxbox,minbox,gapmin,gapmax,
90 . gap_s_l(*),gap_m_l(*),marge,gap_n(4,*)
93 my_real ,
INTENT(IN) :: drad, dgapload
95 CHARACTER(LEN=NCHARTITLE) :: TITR
97 INTEGER ,
INTENT(IN) :: NRTMT
98 type(intbuf_struct_),
intent(inout) :: intbuf_tab
99 integer :: candidate_count
103 INTEGER I, J, L, N1, N2, N3, N4,N_SOL, ESHIFT
105 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
112 . dd1,dd2,dd3,dd4,dd,dd0,xmin,ymin,zmin,
113 . xmax,
ymax,zmax,tzinf0,minbox0,maxbox0,
114 . bid,tzinf_st,marge_st,dd_st,d_max,pensol,d_moy,
115 . xyzm(6),bminma(6),aaa,ledgmax
117 .
DIMENSION(:),
ALLOCATABLE :: edge_l2,edge_l2_tmp
118 INTEGER TAGP(NPART),IAD,N,IE,IL,IP
119 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NPARTNS,IELEM,LPARTNS
121 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IS_LARGE_NODE,LARGE_NODE, TAGNOD,LOCAL_NEXT_NOD
122 INTEGER :: NB_LARGE_NODES
123 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
124 INTEGER (KIND=8) :: IONE,IHUNDRED
125 my_real :: xmin_base, ymin_base, zmin_base, xmax_base, ymax_base, zmax_base
151 dx1=(x(1,n1)-x(1,n2))
152 dy1=(x(2,n1)-x(2,n2))
153 dz1=(x(3,n1)-x(3,n2))
154 dd1=sqrt(dx1**2+dy1**2+dz1**2)
156 dx3=(x(1,n1)-x(1,n4))
157 dy3=(x(2,n1)-x(2,n4))
158 dz3=(x(3,n1)-x(3,n4))
159 dd2=sqrt(dx3**2+dy3**2+dz3**2)
161 dx4=(x(1,n3)-x(1,n2))
162 dy4=(x(2,n3)-x(2,n2))
163 dz4=(x(3,n3)-x(3,n2))
164 dd3=sqrt(dx4**2+dy4**2+dz4**2)
166 dx6=(x(1,n4)-x(1,n3))
167 dy6=(x(2,n4)-x(2,n3))
168 dz6=(x(3,n4)-x(3,n3))
169 dd4=sqrt(dx6**2+dy6**2+dz6**2)
170 dd=dd+ (dd1+dd2+dd3+dd4)
172 IF (msegtyp(l)==0.OR.msegtyp(l)>nrtmt)
THEN
173 d_max=
max(dd1,dd2,dd3,dd4)
174 d_max=
min(d_max,gap_n(1,l))
177 dd_st=
max(dd_st,d_max)
179 d_moy = d_moy + d_max
186 IF(nrtm > 0 .AND. nrtm <= 3)
THEN
187 call margin_reduction(x,numnod,irect,nrtm,nsv,nsn,drad,gap,dgapload,bumult,stfn,dd0)
198 tzinf = marge +
max(gap+dgapload,drad)
203 IF(iddlevel==0) marge_st = marge
204 tzinf_st = marge_st +
max(gap+dgapload,drad)
206 IF (inacti/=7.AND.tzinf>bid)
THEN
207 ibid = nint(tzinf/dd0)
208 ibid =(2*ibid+4)*ibid*2
212 maxbox= half*(dd + 2*tzinf)
239 xmin=
min(xmin,x(1,j))
240 ymin=
min(ymin,x(2,j))
241 zmin=
min(zmin,x(3,j))
242 xmax=
max(xmax,x(1,j))
244 zmax=
max(zmax,x(3,j))
256 xmin=
min(xmin,x(1,j))
257 ymin=
min(ymin,x(2,j))
258 zmin=
min(zmin,x(3,j))
259 xmax=
max(xmax,x(1,j))
261 zmax=
max(zmax,x(3,j))
264 bminma(1) =
max(bminma(1),xmax)
265 bminma(2) =
max(bminma(2),
ymax)
266 bminma(3) =
max(bminma(3),zmax)
267 bminma(4) =
min(bminma(4),xmin)
268 bminma(5) =
min(bminma(5),ymin)
269 bminma(6) =
min(bminma(6),zmin)
279 . ((bminma(1)-bminma(4))*(bminma(2)-bminma(5))
280 . +(bminma(2)-bminma(5))*(bminma(3)-bminma(6))
281 . +(bminma(3)-bminma(6))*(bminma(1)-bminma(4))))
285 nbx = nint(aaa*(bminma(1)-bminma(4)))
286 nby = nint(aaa*(bminma(2)-bminma(5)))
287 nbz = nint(aaa*(bminma(3)-bminma(6)))
295 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
298 IF(res8 > lvoxel8)
THEN
300 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
302 nbx = int((nbx+2)*aaa)-2
303 nby = int((nby+2)*aaa)-2
304 nbz = int((nbz+2)*aaa)-2
313 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
315 IF(res8 > lvoxel8)
THEN
316 nbx =
min(ihundred,
max(nbx8,ione))
317 nby =
min(ihundred,
max(nby8,ione))
318 nbz =
min(ihundred,
max(nbz8,ione))
324 ALLOCATE(npartns(nsn+1),ielem(nrtm),edge_l2(nsn))
328 edge_l2(1:nsn) = zero
335 ALLOCATE(large_node(nsn))
336 ALLOCATE(is_large_node(nsn))
337 ALLOCATE(tagnod(numnod))
338 is_large_node(1:nsn) = 0
339 large_node(1:nsn) = 0
348 IF(ielem_m(1,ie)<=numels)
THEN
349 ielem(ie)= ielem_m(1,ie)
351 CALL insol25(irect ,ixs ,ixs10,ixs16,ixs20,
352 . knod2els ,nod2els ,nels ,ie )
357 IF(inacti==5.OR.inacti==-1)
THEN
359 ALLOCATE(edge_l2_tmp(numnod))
360 edge_l2_tmp(1:numnod)=zero
363 IF(stf(ie)> zero)
THEN
366 n2=irect(mod(il,4)+1,ie)
368 aaa = (x(1,n2)-x(1,n1))*(x(1,n2)-x(1,n1))
369 . + (x(2,n2)-x(2,n1))*(x(2,n2)-x(2,n1))
370 . + (x(3,n2)-x(3,n1))*(x(3,n2)-x(3,n1))
371 edge_l2_tmp(n1) =
max(edge_l2_tmp(n1), aaa )
372 edge_l2_tmp(n2) =
max(edge_l2_tmp(n2), aaa )
373 IF (msegtyp(ie)==0.OR.msegtyp(ie)>nrtmt)
THEN
374 IF(tagnod(n1)==0)
THEN
378 IF(tagnod(n2)==0)
THEN
391 IF(stfn(i)/=zero)
THEN
392 edge_l2(i) = half*sqrt(edge_l2_tmp(n))
393 IF(tagnod(n)==1) ledgmax=ledgmax+edge_l2(i)
397 IF(n_sol > 0) ledgmax=half*ledgmax/n_sol
400 DEALLOCATE(edge_l2_tmp)
409 DO iad=knod2els(n)+1,knod2els(n+1)
413 npartns(i)=npartns(i)+1
417 DO iad=knod2els(n)+1,knod2els(n+1)
425 npartns(i+1) = npartns(i+1) + npartns(i)
428 npartns(i+1) = npartns(i)
432 ALLOCATE(lpartns(npartns(nsn+1)))
436 DO iad=knod2els(n)+1,knod2els(n+1)
440 npartns(i)=npartns(i)+1
441 lpartns(npartns(i))=ip
445 DO iad=knod2els(n)+1,knod2els(n+1)
453 npartns(i+1) = npartns(i)
466 DO i=
inivoxel,(nbx+2)*(nby+2)*(nbz+2)
475 ALLOCATE(local_next_nod(nsn))
483 2 stfn ,xyzm ,nsv ,i_stok ,
485 4
voxel1 ,nbx ,nby ,nbz ,nrtm ,
486 5 gap_s ,gap_m ,marge_st,
487 6 nbinflg ,mbinflg ,ilev ,msegtyp ,
488 7 igap ,gap_s_l ,gap_m_l ,edge_l2 ,ledgmax ,
490 9 iparts ,npartns ,lpartns ,ielem ,icode ,
491 a iskew ,drad, is_large_node, large_node, nb_large_nodes,
492 b dgapload,nrtmt,flag_removed_node,
493 c ielem_m,local_next_nod,iix,iiy,iiz,
494 d intbuf_tab,ipari,nin)
496 DEALLOCATE(local_next_nod)
501 DEALLOCATE(edge_l2,npartns,ielem,lpartns)
502 DEALLOCATE(is_large_node,large_node,tagnod)
505 WRITE(iout,*)
' POSSIBLE IMPACT NUMBER, NSN:',i_stok,nsn
509 . msgtype=msgwarning,
510 . anmode=aninfo_blind_2,
subroutine i25buc_vox1(x, irect, nsv, bumult, nmn, nrtm, nsn, intbuf_tab, gap, i_stok, dist, tzinf, maxbox, minbox, msr, stf, stfn, iddlevel, gap_s, gap_m, igap, gapmin, gapmax, inacti, gap_s_l, gap_m_l, marge, id, titr, nbinflg, mbinflg, ilev, msegtyp, gap_n, bgapsmx, iparts, knod2els, nod2els, kremnode, remnode, ixs, ixs10, ixs16, ixs20, icode, iskew, drad, dgapload, nrtmt, flag_removed_node, ielem_m, nin, npari, ipari)
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 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)