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 "param_c.inc"
73#include "vect07_c.inc"
74
75
76
77 INTEGER NB_NC,NB_EC,I_ADD,MAXSIZ,I_STOK,J_STOK,I_MEM
78 INTEGER I_BID, I_AMAX,NB_N_B, NOINT, NSN,MULTIMP, IGAP
79 INTEGER
80INTEGER NSV(*),CAND_N(*),CAND_E(*), ITAB(*), MSR(*)
81
83 . x(3,*),xyzm(6,*),tzinf,
84 . maxbox,minbox, xmax,
ymax, zmax,
85 . gap, gap_s(*), gap_m(*),
86 . gapmin, gapmax, marge, gapsmx, bgapsmx
87 INTEGER ID
88 CHARACTER(LEN=NCHARTITLE) :: TITR
89 INTEGER, DIMENSION(MVSIZ), INTENT(INOUT) ::PROV_N,PROV_E
90 INTEGER, DIMENSION(MVSIZ), INTENT(INOUT) :: IX1,IX2,IX3,IX4,NSVG
91 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x1,x2,x3,x4
92 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: y1,y2,y3,y4
93 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: z1,z2,z3,z4
94 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: xi,yi,zi
95 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x0,y0,z0
96 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: n11,n21,n31,pene
97 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx1,ny1,nz1
98 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx2,ny2,nz2
99 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx3,ny3,nz3
100 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx4,ny4,nz4
101 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: p1,p2,p3,p4
102 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lb1,lb2,lb3,lb4
103 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lc1,lc2,lc3,lc4
104
105
106
107 INTEGER NB_NCN, NB_ECN, ADDNN, ADDNE, I, J
108 INTEGER INF,SUP,DIR,N1,N2,N3,N4,NN,NE
109
111 . dx,dy,dz,dsup,seuil,xmx,xmn,
112 . gapv(mvsiz)
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177 IF(nb_ec==0.OR.nb_nc==0) THEN
178
179
180
181 CALL i7dstk(i_add,nb_nc,nb_ec,add,bpn,pn,bpe,pe)
182 RETURN
183 ENDIF
184
185
186
187 dx = xyzm(4,i_add) - xyzm(1,i_add)
188 dy = xyzm(5,i_add) - xyzm(2,i_add)
189 dz = xyzm(6,i_add) - xyzm(3,i_add)
191
192 IF(add(2,1)+nb_ec>=maxsiz) THEN
193
194 IF ( nb_n_b == numnod) THEN
195
196
197
198 IF (istamping == 1) THEN
200 . msgtype=msgerror,
201 . anmode=aninfo,
203 . c1=titr)
204 ELSE
206 . msgtype=msgerror,
207 . anmode=aninfo,
209 . c1=titr)
210 ENDIF
211 ENDIF
212 i_mem = 1
213 RETURN
214 ENDIF
215 IF(dsup<minbox.OR.
216 . nb_nc<=nb_n_b.AND.dsup<maxbox.OR.
217 . nb_nc<=nb_n_b.AND.nb_ec==1) THEN
218
219
220
221
222 DO 20 i=1,nb_ec
223 ne = bpe(i)
224 n1=irect(1,ne)
225 n2=irect(2,ne)
226 n3=irect(3,ne)
227 n4=irect(4,ne)
228 DO 20 j=1,nb_nc
229 nn=nsv(bpn(j))
230 IF(nn/=n1.AND.nn/=n2.AND.nn/=n3.AND.nn/=n4) THEN
231 j_stok = j_stok + 1
232 prov_n(j_stok) = bpn(j)
233 prov_e(j_stok) = ne
234 IF(j_stok==nvsiz) THEN
235 lft = 1
236 llt = nvsiz
237 nft = 0
238 j_stok = 0
239 CALL i23cor3t(x ,irect,nsv ,prov_e ,prov_n,
240 2 gapv ,igap ,gap ,gap_s,gapmin ,
241 3 gapmax,msr ,gap_m ,ix1 ,ix2 ,
242 4 ix3 ,ix4 ,nsvg ,x1 ,x2 ,
243 5 x3 ,x4 ,y1 ,y2 ,y3 ,
244 6 y4 ,z1 ,z2 ,z3 ,z4 ,
245 7 xi ,yi ,zi )
246 CALL i7dst3(ix3,ix4,x1 ,x2 ,x3 ,
247 1 x4 ,y1 ,y2 ,y3 ,y4 ,
248 2 z1 ,z2 ,z3 ,z4 ,xi ,
249 3 yi ,zi ,x0 ,y0 ,z0 ,
250 4 nx1,ny1,nz1,nx2,ny2,
251 5 nz2,nx3,ny3,nz3,nx4,
252 6 ny4,nz4,p1 ,p2 ,p3 ,
253 7 p4 ,lb1,lb2,lb3,lb4,
254 8 lc1,lc2,lc3,lc4,llt)
255 CALL i7pen3(marge,gapv,n11,n21,n31,
256 1 pene ,nx1 ,ny1,nz1,nx2,
257 2 ny2 ,nz2 ,nx3,ny3,nz3,
258 3 nx4 ,ny4 ,nz4,p1 ,p2 ,
259 4 p3 ,p4,llt)
260 IF(i_stok+nvsiz<multimp*nsn) THEN
261 CALL i7cmp3(i_stok,cand_e ,cand_n,1,pene,
262 1 prov_n,prov_e)
263 ELSE
264 i_bid = 0
265 CALL i7cmp3(i_bid,cand_e,cand_n,0,pene,
266 1 prov_n,prov_e)
267 IF(i_stok+i_bid<multimp*nsn) THEN
268 CALL i7cmp3(i_stok,cand_e,cand_n,1,pene,
269 1 prov_n,prov_e)
270 ELSE
271 i_mem = 2
272
273
274
275
277 . msgtype=msgwarning,
278 . anmode=aninfo_blind_2,
280 . c1=titr)
281 RETURN
282 ENDIF
283 ENDIF
284 ENDIF
285
286
287 ENDIF
288 20 CONTINUE
289
290
291 CALL i7dstk(i_add,nb_nc,nb_ec,add,bpn,pn,bpe,pe)
292 RETURN
293 ENDIF
294
295
296
297
298
299
300
301
302
303
304
305
306 dir = 1
307 IF(dy==dsup) THEN
308 dir = 2
309 ELSE IF(dz==dsup) THEN
310 dir = 3
311 ENDIF
312 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))/2
313
314
315
316 nb_ncn= 0
317 addnn= add(1,1)
318 inf = 0
319 sup = 0
320 IF(igap==0)THEN
321 DO i=1,nb_nc
322 IF(x(dir,nsv(bpn(i)))<seuil) THEN
323
324 addnn = addnn + 1
325 pn(addnn) = bpn(i)
326 inf = 1
327 ELSE
328 nb_ncn = nb_ncn + 1
329 bpn(nb_ncn) = bpn(i)
330
331 sup = 1
332 ENDIF
333 END DO
334 ELSE
335 gapsmx = zero
336 bgapsmx = zero
337 DO i=1,nb_nc
338 IF(x(dir,nsv(bpn(i)))<seuil) THEN
339
340 addnn = addnn + 1
341 pn(addnn) = bpn(i)
342 gapsmx =
max(gapsmx,gap_s(bpn(i)))
343 inf = 1
344 ELSE
345
346 nb_ncn = nb_ncn + 1
347 bpn(nb_ncn) = bpn(i)
348 bgapsmx =
max(bgapsmx,gap_s(bpn(i)))
349 sup = 1
350 ENDIF
351 END DO
352 END IF
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394 nb_ecn= 0
395 addne= add(2,1)
396 IF(igap==0)THEN
397 DO i=1,nb_ec
398 xmx=
max(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
399 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
400 . + tzinf
401 xmn=
min(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
402 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
403 . - tzinf
404 IF(xmn<seuil.AND.inf==1) THEN
405
406 addne = addne + 1
407 pe(addne) = bpe(i)
408 ENDIF
409 IF(xmx>=seuil.AND.sup==1) THEN
410
411 nb_ecn = nb_ecn + 1
412 bpe(nb_ecn) = bpe(i)
413 ENDIF
414 ENDDO
415 ELSE
416 DO i=1,nb_ec
417 xmn=
min(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
418 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
419 - -sqrt(three)*
min(
max(gapsmx+gap_m(bpe(i)),gapmin),gapmax)
420 - -marge
421 IF(xmn<seuil.AND.inf==1) THEN
422
423 addne = addne + 1
424 pe(addne) = bpe(i)
425 ENDIF
426 xmx=
max(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
427 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
428 + +sqrt(three)*
min(
max(bgapsmx+gap_m(bpe(i)),gapmin),gapmax)
429 + +marge
430 IF(xmx>=seuil.AND.sup==1) THEN
431
432 nb_ecn = nb_ecn + 1
433 bpe(nb_ecn) = bpe(i)
434 ENDIF
435 ENDDO
436 END IF
437
438
439
440 add(1,2) = addnn
441 add(2,2) = addne
442
443
444
445
446
447
448 xyzm(1,i_add+1) = xyzm(1,i_add)
449 xyzm(2,i_add+1) = xyzm(2,i_add)
450 xyzm(3,i_add+1) = xyzm(3,i_add)
451 xyzm(4,i_add+1) = xyzm(4,i_add)
452 xyzm(5,i_add+1) = xyzm(5,i_add)
453 xyzm(6,i_add+1) = xyzm(6,i_add)
454 xyzm(dir,i_add+1) = seuil
455 xyzm(dir+3,i_add) = seuil
456
457 nb_nc = nb_ncn
458 nb_ec = nb_ecn
459
460 i_add = i_add + 1
461 IF(i_add>=1000) THEN
462
463 IF ( nb_n_b == numnod) THEN
464
465
466
467 IF (istamping == 1) THEN
469 . msgtype=msgerror,
470 . anmode=aninfo,
472 . c1=titr)
473 ELSE
475 . msgtype=msgerror,
476 . anmode=aninfo,
478 . c1=titr)
479 ENDIF
480 ENDIF
481 i_mem = 1
482 RETURN
483 ENDIF
484
485
486 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 i23cor3t(x, irect, nsv, cand_e, cand_n, gapv, igap, gap, gap_s, gapmin, gapmax, msr, gap_m, ix1, ix2, ix3, ix4, nsvg, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi)
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 i7dstk(i_add, nb_nc, nb_ec, add, bpn, pn, bpe, pe)
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)