58
59
60
63
64
65
66#include "implicit_f.inc"
67
68
69
70#include "mvsiz_p.inc"
71
72
73
74#include "units_c.inc"
75#include "com04_c.inc"
76#include "vect07_c.inc"
77#include "scr06_c.inc"
78
79
80
81 INTEGER NMN, NRTM, NSN, NOINT,I_STOK,MULTIMP,ISTF,IGAP,
82 . INACTI
83 INTEGER IRECT(4,*),NSV(*),NSEG(*),MWA(*)
84 INTEGER CAND_E(*),CAND_N(*),MSR(*),MAXSIZ,IDDLEVEL
85 INTEGER ITAB(*),IT19
87 . stf(*),stfn(*),x(3,*),xyzm(6,*),gap_s(*),gap_m(*),
88 . dist,bumult,gap,tzinf,maxbox,minbox,gapmin,gapmax,
89 . gap_s_l(*),gap_m_l(*)
90 INTEGER ID
91 CHARACTER(LEN=NCHARTITLE) :: TITR
92 INTEGER, DIMENSION(MVSIZ), INTENT(IN) :: PROV_N,PROV_E,NSVG
93 INTEGER, DIMENSION(MVSIZ), INTENT(IN) :: IX1,IX2,IX3,IX4
94 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: n11,n12,n13,pene
95 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: x1,x2,x3,x4
96 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: y1,y2,y3,y4
97 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: z1,z2,z3,z4
98 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: xi,yi,zi
99 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: x0,y0,z0
100 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx1,ny1,nz1
101 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx2,ny2,nz2
102 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx3,ny3,nz3
103 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: nx4,ny4,nz4
104 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: p1,p2,p3,p4
105 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lb1,lb2,lb3,lb4
106 my_real,
DIMENSION(MVSIZ),
INTENT(IN) :: lc1,lc2,lc3,lc4,stif
107
108
109
110 INTEGER I, J, L, N1, N2, N3, N4, I_AMAX,I_MEM
111 INTEGER I_ADD, ADESTK, NB_NC, NB_EC, ADNSTK, IBID
112 INTEGER IP1, IP2, IP21, IP22, IP31,J_STOK,I_BID,NB_N_B
114 . dx1,dy1,dz1,
115 . dx3,dy3,dz3,
116 . dx4,dy4,dz4,
117 . dx6,dy6,dz6,
118 . dd1,dd2,dd3,dd4,dd,dd0,xmin,ymin,zmin,tb,
119 . xmax,
ymax,zmax,minbox_st,maxbox_st,gapsmax,
120 . bid,tzinf_st,marge,marge_st,gapv(mvsiz),
121 . xmax_m,ymax_m,zmax_m,xmin_m,ymin_m,zmin_m,
122 . xmax_s,ymax_s,zmax_s,xmin_s,ymin_s,zmin_s
123 LOGICAL :: TYPE18
124
125
126
127
128 type18=.false.
129 IF(inacti==7)type18=.true.
130
131
132
133
134 dd=zero
135 DO 10 l=1,nrtm
136
137 n1=irect(1,l)
138 n2=irect(2,l)
139 n3=irect(3,l)
140 n4=irect(4,l)
141
142 dx1=(x(1,n1)-x(1,n2))
143 dy1=(x(2,n1)-x(2,n2))
144 dz1=(x(3,n1)-x(3,n2))
145 dd1=sqrt(dx1**2+dy1**2+dz1**2)
146
147 dx3=(x(1,n1)-x(1,n4))
148 dy3=(x(2,n1)-x(2,n4))
149 dz3=(x(3,n1)-x(3,n4))
150 dd2=sqrt(dx3**2+dy3**2+dz3**2)
151
152 dx4=(x(1,n3)-x(1,n2))
153 dy4=(x(2,n3)-x(2,n2))
154 dz4=(x(3,n3)-x(3,n2))
155 dd3=sqrt(dx4**2+dy4**2+dz4**2)
156
157 dx6=(x(1,n4)-x(1,n3))
158 dy6=(x(2,n4)-x(2,n3))
159 dz6=(x(3,n4)-x(3,n3))
160 dd4=sqrt(dx6**2+dy6**2+dz6**2)
161 dd=dd+ (dd1+dd2+dd3+dd4)
162 10 CONTINUE
163
164
165 dd0=dd/nrtm/four
166 dd = dd0
167
168
169
170
171 marge = bumult*dd
172
173 tzinf = marge + gap
174
175 marge_st = bmul0*dd
176
177 IF(iddlevel==0) marge_st = marge
178 tzinf_st = marge_st + gap
179
180
181 maxbox= half*(dd + 2*tzinf)
182 minbox= half*maxbox
183 maxbox_st= half*(dd + 2*tzinf_st)
184 minbox_st= half*maxbox_st
185
186 dist = zero
187
188
189
190
191 xmin_m=ep30
192 xmax_m=-ep30
193 ymin_m=ep30
194 ymax_m=-ep30
195 zmin_m=ep30
196 zmax_m=-ep30
197
198 DO 20 i=1,nmn
199 j=msr(i)
200 xmin_m=
min(xmin_m,x(1,j))
201 ymin_m=
min(ymin_m,x(2,j))
202 zmin_m=
min(zmin_m,x(3,j))
203 xmax_m=
max(xmax_m,x(1,j))
204 ymax_m=
max(ymax_m,x(2,j))
205 zmax_m=
max(zmax_m,x(3,j))
206 20 CONTINUE
207
208 xmin_s=ep30
209 xmax_s=-ep30
210 ymin_s=ep30
211 ymax_s=-ep30
212 zmin_s=ep30
213 zmax_s=-ep30
214
215 DO 25 i=1,nsn
216 j=nsv(i)
217 xmin_s=
min(xmin_s,x(1,j))
218 ymin_s=
min(ymin_s,x(2,j))
219 zmin_s=
min(zmin_s,x(3,j))
220 xmax_s=
max(xmax_s,x(1,j))
221 ymax_s=
max(ymax_s,x(2,j))
222 zmax_s=
max(zmax_s,x(3,j))
223 25 CONTINUE
224
225 xmin=
min(xmin_m-tzinf_st,xmin_s)
226 ymin=
min(ymin_m-tzinf_st,ymin_s)
227 zmin=
min(zmin_m-tzinf_st,zmin_s)
228 xmax=
max(xmax_m+tzinf_st,xmax_s)
229 ymax=
max(ymax_m+tzinf_st,ymax_s)
230 zmax=
max(zmax_m+tzinf_st,zmax_s)
231
232
233
234 nb_n_b = 1
235 i_mem = 0
236
237
238 100 CONTINUE
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260 maxsiz =
max(numnod,nrtm+100)
261 ip1 = 1
262 ip2 = ip1+maxsiz
263
264 ip21= ip2+3*maxsiz
265 ip22= ip21+numnod
266 ip31= ip22+numnod
267
268
269
270
271
272
273
274
275 mwa(ip31) = 0
276 mwa(ip31+1) = 0
277 mwa(ip31+2) = 0
278 mwa(ip31+3) = 0
279 i_add = 1
280 i_amax = 1
281 xyzm(1,i_add) = xmin
282 xyzm(2,i_add) = ymin
283 xyzm(3,i_add) = zmin
284 xyzm(4,i_add) = xmax
286 xyzm(6,i_add) = zmax
287 i_stok = 0
288 j_stok = 0
289 adnstk = 0
290 adestk = 0
291 nb_nc = nsn
292 nb_ec = nrtm
293
294
295
296 DO 120 i=1,nb_ec
297 mwa(ip1+i-1) = i
298 120 CONTINUE
299 DO 140 i=1,nb_nc
300 mwa(ip21+i-1) = i
301 140 CONTINUE
302
303
304
305
306
307 200 CONTINUE
308
309
311 1 mwa(ip1) ,mwa(ip2) ,mwa(ip21),mwa(ip22),mwa(ip31+2*(i_add-2)),
312 2 irect ,x ,nb_nc ,nb_ec ,xyzm ,
313 3 i_add ,nsv ,i_amax ,xmax ,
ymax ,
314 4 zmax ,3*maxsiz ,i_stok ,i_mem ,nb_n_b ,
315 5 cand_n ,cand_e ,nsn ,noint ,tzinf_st ,
316 6 maxbox_st,minbox_st,stf ,stfn ,j_stok ,
317 7 multimp ,istf , itab ,gap ,gap_s ,
318 8 gap_m ,igap ,gapmin ,gapmax ,marge_st ,
319 9 gap_s_l ,gap_m_l ,
id ,titr ,
320 1 ix1 ,ix2 ,ix3,ix4 ,nsvg ,
321 2 prov_n ,prov_e ,n11,n12 ,n13 ,
322 3 pene ,x1 ,x2 ,x3 ,x4 ,
323 4 y1 ,y2 ,y3 ,y4 ,z1 ,
324 5 z2 ,z3 ,z4 ,xi ,yi ,
325 6 zi ,x0 ,y0 ,z0 ,nx1 ,
326 7 ny1 ,nz1 ,nx2,ny2 ,nz2 ,
327 8 nx3 ,ny3 ,nz3,nx4 ,ny4 ,
328 9 nz4 ,p1 ,p2 ,p3 ,p4 ,
329 1 lb1 ,lb2 ,lb3,lb4 ,lc1 ,
330 2 lc2 ,lc3 ,lc4,stif)
331
332 IF (i_mem == 2)THEN
333 RETURN
334 ENDIF
335
336
337 IF(i_mem==1)THEN
338 nb_n_b = nb_n_b + 1
339 i_mem = 0
340 GO TO 100
341 ELSE IF(i_mem==2) THEN
342 marge_st = three_over_4*marge_st
343 tzinf_st = marge_st + gap
344 i_mem = 0
345 IF(marge_st<em03) THEN
346
347
348
350 . msgtype=msgerror,
351 . anmode=aninfo,
353 . c1=titr)
354 ENDIF
355 GO TO 100
356 ENDIF
357 IF(i_add/=0) GO TO 200
358
359
360 IF(j_stok/=0)THEN
361 lft = 1
362 llt = j_stok
363 CALL i7cor3(x ,irect,nsv ,prov_e ,prov_n,
364 . stf ,stfn ,gapv ,igap ,gap ,
365 . gap_s,gap_m,istf ,gapmin ,gapmax,
366 . gap_s_l,gap_m_l ,zero ,ix1 ,ix2 ,
367 5 ix3 ,ix4 ,nsvg,x1 ,x2 ,
368 6 x3 ,x4 ,y1 ,y2 ,y3 ,
369 7 y4 ,z1 ,z2 ,z3 ,z4 ,
370 8 xi ,yi ,zi ,stif ,zero ,
371 9 llt)
372 CALL i7dst3(ix3,ix4,x1 ,x2 ,x3 ,
373 1 x4 ,y1 ,y2 ,y3 ,y4 ,
374 2 z1 ,z2 ,z3 ,z4 ,xi ,
375 3 yi ,zi ,x0 ,y0 ,z0 ,
376 4 nx1,ny1,nz1,nx2,ny2,
377 5 nz2,nx3,ny3,nz3,nx4,
378 6 ny4,nz4,p1 ,p2 ,p3 ,
379 7 p4 ,lb1,lb2,lb3,lb4,
380 8 lc1,lc2,lc3,lc4,llt)
381 CALL i7pen3(marge_st,gapv,n11,n12,n13 ,
382 1 pene ,nx1 ,ny1,nz1,nx2,
383 2 ny2 ,nz2 ,nx3,ny3,nz3,
384 3 nx4 ,ny4 ,nz4,p1 ,p2 ,
385 4 p3 ,p4,llt)
386 IF(i_stok+j_stok<multimp*nsn) THEN
387 CALL i7cmp3(i_stok,cand_e ,cand_n,1,pene,
388 1 prov_n,prov_e)
389 ELSE
390 i_bid = 0
391 CALL i7cmp3(i_bid,cand_e,cand_n,0,pene,
392 1 prov_n,prov_e)
393 IF(i_stok+i_bid<multimp*nsn) THEN
394 CALL i7cmp3(i_stok,cand_e,cand_n,1,pene,
395 1 prov_n,prov_e)
396 ELSE
397 i_mem = 2
398 RETURN
399 marge_st = three_over_4*marge_st
400 tzinf_st = marge_st + gap
401 i_mem = 0
402
403
404
405 IF(marge_st<em03) THEN
406
407
408
410 . msgtype=msgerror,
411 . anmode=aninfo,
413 . c1=titr)
414 ENDIF
415 GO TO 100
416 ENDIF
417 ENDIF
418 ENDIF
419
420 IF(.NOT.type18)THEN
421 IF ((nsn/=0).AND.(it19<=0)) THEN
422 WRITE(iout,*)' POSSIBLE IMPACT NUMBER:',i_stok,' (<=', 1+(i_stok-1)/nsn,'*NSN)'
423 ELSEIF(nsn==0) THEN
425 . msgtype=msgwarning,
426 . anmode=aninfo_blind_2,
428 . c1=titr)
429 ENDIF
430 endif
431
432
433
434
435 DO i=1,numnod+numfakenodigeo
436 mwa(i)=0
437 ENDDO
438
439 RETURN
subroutine i7cmp3(i_stok, cand_e, cand_n, iflag, pene, prov_n, prov_e)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
subroutine i7cor3(x, irect, nsv, cand_e, cand_n, stf, stfn, gapv, igap, gap, gap_s, gap_m, istf, gapmin, gapmax, gap_s_l, gap_m_l, drad, ix1, ix2, ix3, ix4, nsvg, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, stif, dgapload, last)
subroutine i7dst3(ix3, ix4, x1, x2, x3, x4, 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, last)
subroutine i7pen3(marge, gapv, n1, n2, n3, pene, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, last)
subroutine i7tri(bpe, pe, bpn, pn, add, irect, x, nb_nc, nb_ec, xyzm, i_add, nsv, i_amax, xmax, ymax, zmax, maxsiz, i_stok, i_mem, nb_n_b, cand_n, cand_e, nsn, noint, tzinf, maxbox, minbox, stf, stfn, j_stok, multimp, istf, itab, gap, gap_s, gap_m, igap, gapmin, gapmax, marge, gap_s_l, gap_m_l, id, titr, ix1, ix2, ix3, ix4, nsvg, prov_n, prov_e, n11, n12, n13, pene, x1, x2, x3, x4, 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, stif)
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)