39 1 X ,IRECT,NSV ,NSEG ,IRTL,
40 2 NMN ,NRTM ,MWA ,NSN ,XYZM ,
41 3 NOINT ,MSR ,ST ,DMIN ,TZINF05,
42 4 IGNORE,THK ,KNOD2ELS,KNOD2ELC,KNOD2ELTG,
43 5 NOD2ELS,NOD2ELC,NOD2ELTG,
44 6 NINT ,IXC ,IXTG ,THK_PART,IPARTC ,
45 7 GEO ,IXS ,IXS10 ,PM ,IXS16 ,
46 8 IXS20 ,IPARTTG ,ID ,TITR ,IGEO ,
48 1 IX1 ,IX2 ,IX3,IX4 ,NSVG ,
49 2 PROV_N ,PROV_E ,N11,N12 ,N13 ,
50 3 X1 ,X2 ,X3 ,X4 ,STIF ,
51 4 Y1 ,Y2 ,Y3 ,Y4 ,Z1 ,
52 5 Z2 ,Z3 ,Z4 ,XI ,YI ,
53 6 ZI ,X0 ,Y0 ,Z0 ,NX1 ,
54 7 NY1 ,NZ1 ,NX2,NY2 ,NZ2 ,
55 8 NX3 ,NY3 ,NZ3,NX4 ,NY4 ,
56 9 NZ4 ,P1 ,P2 ,P3 ,P4 ,
57 1 LB1 ,LB2 ,LB3,LB4 ,LC1 ,
58 2 LC2 ,LC3 ,LC4,S ,T ,
62 use element_mod ,
only :nixs,nixc,nixtg
64 use i2trivox_mod ,
only : i2trivox
65 use file_descriptor_mod ,
only : iout
76#include "implicit_f.inc"
87#include "vect07_c.inc"
91 INTEGER NMN, NRTM, NSN, NOINT, IGNORE, NINT,ILEV
92 INTEGER IRECT(4,*),NSV(*),NSEG(*),MWA(*)
93 INTEGER MSR(*),IRTL(*),MAXSIZ,KNOD2ELS(*), KNOD2ELC(*),
94 . KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*), NOD2ELTG(*),
95 . IXC(NIXC,*),IXTG(NIXTG,*),IPARTC(*),
96 . IXS(NIXS,*),IXS10(*), IXS16(*), IXS20(*),IPARTTG(*),IGEO(*),
100 . X(3,*),XYZM(6,*),ST(*),DMIN(*),TZINF05,THK(*),THK_PART(*),
101 . GEO(NPROPG,*),PM(*)
103 CHARACTER(LEN=NCHARTITLE) :: TITR
104 INTEGER,
DIMENSION(MVSIZ),
INTENT(INOUT) :: PROV_N,PROV_E,NSVG
105 INTEGER,
DIMENSION(MVSIZ),
INTENT(INOUT) :: IX1,IX2,IX3,IX4
106 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: N11,N12,N13
107 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: X1,X2,X3,
108 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: Y1,Y2,Y3,Y4
109 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: Z1,Z2,Z3,Z4
110 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: XI,YI,ZI
111 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: X0,Y0,Z0
112 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx1,ny1,nz1
113 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx2,ny2,nz2
114 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx3,ny3,nz3
115 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx4,ny4,nz4
116 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: p1,p2,p3,p4
117 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lb1,lb2,lb3,lb4
118 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lc1,lc2,lc3,lc4
119 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: stif
120 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: s,t
125 INTEGER I, J, L, N1, N2, N3, N4, I_AMAX,I_MEM
126 INTEGER I_ADD, ADESTK, NB_NC, NB_EC, ADNSTK,IEL,N
127 INTEGER IP1, IP2, IP21, IP22, IP31,J_STOK,I_BID,NB_N_B,IS,IAD,
128 . mg,ip,nels,nelc,neltg,jj,jjj,iflag
131 . dx1,dy1,dz1,dx3,dy3,dz3,dx4,dy4,dz4,dx6,dy6,dz6,
132 . dd1,dd2,dd3,dd4,dd,xmin,ymin,zmin,maxbox,minbox,xmax,
ymax,zmax,
133 . bid,tzinfmin,thksecnd,thkmain,
area,vol,gapv(mvsiz),dsearch
134 my_real :: local_thkmain
135 integer,
dimension(3) :: cell_nb
136 my_real,
dimension(3) :: distance
137 my_real,
dimension(6) :: bound
138 my_real :: cell_size,margin,gapmin,gapmax
139 my_real,
dimension(:,:),
allocatable :: segment_data
144 allocate(segment_data(nrtm,2))
145 segment_data(1:nrtm,1:2) = zero
149 IF (ignore >= 2)
THEN
160 dx1=(x(1,n1)-x(1,n3))
161 dy1=(x(2,n1)-x(2,n3))
162 dz1=(x(3,n1)-x(3,n3))
163 segment_data(l,1) =
max(segment_data(l,1),sqrt(dx1**2+dy1**2+dz1**2))
164 dd=
max(dd,sqrt(dx1**2+dy1**2+dz1**2))
166 dx3=(x(1,n2)-x(1,n4))
167 dy3=(x(2,n2)-x(2,n4))
168 dz3=(x(3,n2)-x(3,n4))
169 segment_data(l,1) =
max(segment_data(l,1),sqrt(dx3**2+dy3**2+dz3**2))
170 dd=
max(dd,sqrt(dx1**2+dy1**2+dz1**2))
175 DO iad = knod2elc(is)+1,knod2elc(is+1)
179 IF ( thk_part(ip) /= zero)
THEN
180 thksecnd =
max(thksecnd,thk_part(ip))
181 ELSEIF ( thk(iel) /= zero)
THEN
182 thksecnd =
max(thksecnd,thk(iel))
184 thksecnd =
max(thksecnd,geo(1,mg))
188 DO iad = knod2eltg(is)+1,knod2eltg(is+1)
192 IF ( thk_part(ip) /= zero)
THEN
193 thksecnd =
max(thksecnd,thk_part(ip))
194 ELSEIF ( thk(iel) /= zero)
THEN
195 thksecnd =
max(thksecnd,thk(iel))
197 thksecnd =
max(thksecnd,geo(1,mg))
205 CALL insol3(x,irect,ixs,nint,nels,i,
206 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
208 CALL incoq3(irect,ixc ,ixtg ,nint ,nelc ,
209 . neltg,i,geo ,pm ,knod2elc ,
210 . knod2eltg ,nod2elc ,nod2eltg,thk,2,igeo ,
211 . stack%pm , iworksh)
216 IF ( thk_part(ip) /= zero)
THEN
217 local_thkmain =
max(local_thkmain,thk_part(ip))
218 ELSEIF ( thk(nelc) /= zero)
THEN
219 local_thkmain =
max(local_thkmain,thk(nelc))
221 local_thkmain =
max(local_thkmain,geo(1,mg))
223 ELSEIF (neltg /= 0)
THEN
226 IF ( thk_part(ip) /= zero)
THEN
227 local_thkmain =
max(local_thkmain,thk_part(ip))
228 ELSEIF ( thk(numelc+neltg) /= zero)
THEN
229 local_thkmain =
max(local_thkmain,thk(numelc+neltg))
231 local_thkmain =
max(local_thkmain,geo(1,mg))
233 ELSEIF(nels/=0 .AND. nels <= numels8 .AND. ignore == 2)
THEN
242 local_thkmain =
max(local_thkmain,vol/
area)
244 thkmain =
max(thkmain,local_thkmain)
245 segment_data(i,2) = local_thkmain + thksecnd
247 if(dsearch==zero)
then
249 segment_data(i,2) =
max(zep05*segment_data(i,1),zep6*segment_data(i,2))
252! taille bucket
min = tzinf05
254 . tzinf05 =
max(zep05*dd,0.6*(thkmain+thksecnd))
267 dx1=(x(1,n1)-x(1,n2))
268 dy1=(x(2,n1)-x(2,n2))
269 dz1=(x(3,n1)-x(3,n2))
270 dd1=(dx1**2+dy1**2+dz1**2)
272 dx3=(x(1,n1)-x(1,n4))
273 dy3=(x(2,n1)-x(2,n4))
274 dz3=(x(3,n1)-x(3,n4))
275 dd2=(dx3**2+dy3**2+dz3**2)
277 dx4=(x(1,n3)-x(1,n2))
278 dy4=(x(2,n3)-x(2,n2))
279 dz4=(x(3,n3)-x(3,n2))
280 dd3=(dx4**2+dy4**2+dz4**2)
282 dx6=(x(1,n4)-x(1,n3))
283 dy6=(x(2,n4)-x(2,n3))
284 dz6=(x(3,n4)-x(3,n3))
285 dd4=(dx6**2+dy6**2+dz6**2)
286 segment_data(l,1) = (dd1+dd2+dd3+dd4) / four
287 dd=dd+ (dd1+dd2+dd3+dd4)
290 dd = sqrt(dd/nrtm/four)
294 tzinfmin = tzinf05*em01
306 segment_data(l,2) = tzinf05
307 elseif(ignore==2.or.ignore==3)
then
308 if(dsearch/=zero) segment_data(l,2) = tzinf05
310 segment_data(l,2) =
max(tzinf05,segment_data(l,1))
326 xmin=
min(xmin,x(1,j))
327 ymin=
min(ymin,x(2,j))
328 zmin=
min(zmin,x(3,j))
329 xmax=
max(xmax,x(1,j))
331 zmax=
max(zmax,x(3,j))
336 margin =
max(margin,segment_data(i,2))
338 margin =
max(margin,tzinf05)
339 bound(1)=xmin - margin
340 bound(2)=ymin - margin
341 bound(3)=zmin - margin
342 bound(4)=xmax + margin
343 bound(5)=
ymax + margin
344 bound(6)=zmax + margin
347 distance(1:3) = bound(4:6) - bound(1:3)
349 cell_size = four * dd
350 cell_nb(1:3) = int(distance(1:3)/cell_size)
351 cell_nb(1:3) =
max(cell_nb(1:3),1)
352 gapmin = huge(gapmin)
353 gapmax = -huge(gapmax)
354 call i2trivox(nvsiz,numnod,numels,numels10,
355 . numels16,numels20,numelc,numeltg,
357 . ixs,ixs10,ixs16,ixs20,ixc,ixtg,
359 . ilev,npropgi,npropg,numgeo,npropm,nummat,npart,ignore,cell_nb,nsv,irtl,ipartc,iparttg,
360 . knod2els,knod2elc,knod2eltg,nod2els,nod2elc,nod2eltg,irect,
361 . igeo,dsearch,bound,tzinf05,segment_data,
362 . dmin,thk,thk_part,x,geo,st,pm,stack,gapmin,gapmax)
364 deallocate(segment_data)
366 if((ignore<=1).or.((ignore==2.or.ignore==3).and.dsearch/=zero))
then
367 write(iout,2001) tzinf05
368 elseif(ignore>=2)
then
369 write(iout,2002) gapmin,gapmax
373 2001
format(//,1x,
'SEARCH DISTANCE . . . . . . . . . . . . . .',1pg20.13/)
374 2002
format(//,1x,
'SEARCH DISTANCE . . . . . . . . . . . . . .BETWEEN',1pg20.13,
' AND ',1pg20.13/)
subroutine i2buc1(x, irect, nsv, nseg, irtl, nmn, nrtm, mwa, nsn, xyzm, noint, msr, st, dmin, tzinf05, ignore, thk, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, nint, ixc, ixtg, thk_part, ipartc, geo, ixs, ixs10, pm, ixs16, ixs20, iparttg, id, titr, igeo, stack, iworksh, ix1, ix2, ix3, ix4, nsvg, prov_n, prov_e, n11, n12, n13, x1, x2, x3, x4, stif, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, x0, y0, z0, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, s, t, ilev)