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