62 use element_mod , only :nixs,nixc,nixtg
64 use i2trivox_mod , only : i2trivox
65 use file_descriptor_mod , only : iout
66
67
68
69
70
71
72
73
74
75
76#include "implicit_f.inc"
77
78
79
80#include "mvsiz_p.inc"
81
82
83
84#include "com04_c.inc"
85#include "param_c.inc"
86#include "scr08_c.inc"
87#include "vect07_c.inc"
88
89
90
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 . (NIXS,*),IXS10(*), IXS16(*), IXS20(*),IPARTTG(*),IGEO(*),
97 . IWORKSH(*)
98
100 . x(3,*),xyzm(6,*),st(*),dmin(*),tzinf05,thk(*),thk_part(*),
101 . geo(npropg,*),pm(*)
102 INTEGER
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_realDIMENSION(MVSIZ),
INTENT(IN) :: n11,n12,n13
107 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x1,x2,x3,x4
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
121 type(stack_ply), intent(inout) :: stack
122
123
124
125 INTEGER I, J, L, N1, N2, N3, N4, I_AMAX,I_MEM
126 INTEGER I_ADD, ADESTK, NB_NC, , ADNSTK,IEL,N
127 INTEGER IP1, IP2, IP21, IP22, IP31,J_STOK,I_BID,NB_N_B,IS,IAD,
128 . MG,,NELS,NELC,NELTG,JJ,JJJ,IFLAG
129
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
135 integer, dimension(3) :: cell_nb
136 my_real,
dimension(3) :: distance
138 my_real :: cell_size,margin,gapmin,gapmax
139 my_real,
dimension(:,:),
allocatable :: segment_data
140
141
142
143
144 allocate(segment_data(nrtm,2))
145 segment_data(1:nrtm,1:2) = zero
146 dd = zero
147 dsearch = tzinf05
148 iflag = 1
149 IF (ignore >= 2) THEN
150 thksecnd = zero
151 thkmain = zero
152
153 DO l=1,nrtm
154
155 n1=irect(1,l)
156 n2=irect(2,l)
157 n3=irect(3,l)
158 n4=irect(4,l)
159
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))
165
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))
171 ENDDO
172 DO i=1,nsn
173 is = nsv(i)
174
175 DO iad = knod2elc(is)+1,knod2elc(is+1)
176 iel = nod2elc(iad)
177 mg=ixc(6,iel)
178 ip = ipartc(iel)
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))
183 ELSE
184 thksecnd =
max(thksecnd,geo(1,mg))
185 ENDIF
186 ENDDO
187
188 DO iad = knod2eltg(is)+1,knod2eltg(is+1)
189 iel = nod2eltg(iad)
190 mg=ixtg(5,iel)
191 ip = iparttg(iel)
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))
196 ELSE
197 thksecnd =
max(thksecnd,geo(1,mg))
198 ENDIF
199 ENDDO
200 ENDDO
201 DO i=1,nrtm
202 nels = 0
203 nelc = 0
204 neltg = 0
205 CALL insol3(x,irect,ixs,nint,nels,i,
206 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
207 . ixs16,ixs20)
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)
212 local_thkmain = zero
213 IF (nelc /= 0) THEN
214 mg=ixc(6,nelc)
215 ip = ipartc(nelc)
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))
220 ELSE
221 local_thkmain =
max(local_thkmain,geo(1,mg))
222 ENDIF
223 ELSEIF (neltg /= 0)THEN
224 mg=ixtg(5,neltg)
225 ip = iparttg(neltg)
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))
230 ELSE
231 local_thkmain =
max(local_thkmain,geo(1,mg))
232 ENDIF
233 ELSEIF(nels/=0 .AND. nels <= numels8 .AND. ignore == 2) THEN
234 DO jj=1,8
235 jjj=ixs(jj+1,nels)
236 xc(jj)=x(1,jjj)
237 yc(jj)=x(2,jjj)
238 zc(jj)=x(3,jjj)
239 END DO
241
242 local_thkmain =
max(local_thkmain,vol/
area)
243 ENDIF
244 thkmain =
max(thkmain,local_thkmain)
245 segment_data(i,2) = local_thkmain + thksecnd
246 ENDDO
247 if(dsearch==zero) then
248 do i=1,nrtm
249 segment_data(i,2) =
max(zep05*segment_data(i,1),zep6*segment_data(i,2))
250 enddo
251 endif
252
253 IF(tzinf05==zero)
254 . tzinf05 =
max(zep05*dd,0.6*(thkmain+thksecnd))
255 maxbox= two*tzinf05
256 minbox= half*maxbox
257 tzinfmin = tzinf05
258 ELSE
259
260 DO l=1,nrtm
261
262 n1=irect(1,l)
263 n2=irect(2,l)
264 n3=irect(3,l)
265 n4=irect(4,l)
266
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)
271
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)
276
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)
281
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)
288 ENDDO
289
290 dd = sqrt(dd/nrtm/four)
291 IF(tzinf05==zero)tzinf05 = dd
292 maxbox= two*tzinf05
293 minbox= half*maxbox
294 tzinfmin = tzinf05*em01
295 ENDIF
296
297
298
299
300
301
302
303
304 do l=1,nrtm
305 if(ignore==1) then
306 segment_data(l,2) = tzinf05
307 elseif(ignore==2.or.ignore==3) then
308 if(dsearch/=zero) segment_data(l,2) = tzinf05
309 else
310 segment_data(l,2) =
max(tzinf05,segment_data(l,1))
311 endif
312 enddo
313
314
315
316
317 xmin=ep30
318 xmax=-ep30
319 ymin=ep30
321 zmin=ep30
322 zmax=-ep30
323
324 DO i=1,nmn
325 j=msr(i)
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))
332 ENDDO
333
334 margin = zero
335 do i=1,nrtm
336 margin =
max(margin,segment_data(i,2))
337 enddo
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
345
346
347 distance(1:3) = bound(4:6) - bound(1:3)
348
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,
356 . nint,noint,
357 . ixs,ixs10,ixs16,ixs20,ixc,ixtg,
358 . iworksh,nsn,nrtm,
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)
363
364 deallocate(segment_data)
365
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
370 else
371 endif
372
373 2001 format(//,1x,'SEARCH DISTANCE . . . . . . . . . . . . . .',1pg20.13/)
374 2002 format(//,1x,'SEARCH DISTANCE . . . . . . . . . . . . . .BETWEEN',1pg20.13,' AND ',1pg20.13/)
375 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine incoq3(irect, ixc, ixtg, nint, nel, neltg, is, geo, pm, knod2elc, knod2eltg, nod2elc, nod2eltg, thk, nty, igeo, pm_stack, iworksh)
subroutine insol3(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ir, ixs10, ixs16, ixs20)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle