215
216
217
218#include "implicit_f.inc"
219
220
221
222#include "mvsiz_p.inc"
223
224
225
226#include "com04_c.inc"
227#include "com08_c.inc"
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277 INTEGER NB_NC,NB_EC,I_ADD,MAXSIZ,I_STOK_GLOB,I_STOK,MX_CAND,
278 . NB_N_B,I_ADD_MAX,CONT ,IXS(NIXS,*),IXS16(8,*),
279 . ADD(2,*),BPE(*),PE(*),BPN(*),PN(*),
280 . (*),CAND_N(*),CAND_E(*),NELEM(*),
281 . PROV_N(*) ,PROV_E(*) ,IXS20(12,*), IXS10(6,*)
282
284 . x(3,*),v(3,*),a(3,*),xyzm(6,*),eminx(6,*),
285 . minbox,tzinf,dist
286
287
288
289 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,,I,J,DIR,
290 . NN,NE,LE,K,L,NCAND_PROV,N16,N20,N8,N10
291
293 . dx,dy,dz,dsup,seuil,xx,yy,zz
294
295
296
297
298
299
300
301
302
303
304
305 IF(add(2,i_add)+nb_ec>maxsiz) THEN
306
307 cont = -1
308
309
310
311
312
313 RETURN
314 ENDIF
315
316
317
318 IF(nb_ec/=0.AND.nb_nc/=0) THEN
319
320 dx = xyzm(4,i_add) - xyzm(1,i_add)
321 dy = xyzm(5,i_add) - xyzm(2,i_add)
322 dz = xyzm(6,i_add) - xyzm(3,i_add)
324
325
326
327
328
329
330
331
332 IF(nb_ec+nb_nc<=128) THEN
333 ncand_prov = nb_ec*nb_nc
334 ELSE
335 ncand_prov = 129
336 ENDIF
337
338 IF(dsup<minbox.OR.nb_nc<=nb_n_b.OR.ncand_prov<=128)THEN
339
340 ncand_prov = nb_ec*nb_nc
341 DO l=1,ncand_prov
342 i = 1+(l-1)/nb_nc
343 j = l-(i-1)*nb_nc
344 le = bpe(i)
345 ne = nelem(le)
346 n8 = ne
347 n10 = n8-numels8
348 n20 = n10-numels10
349 n16 = n20-numels20
350 nn = nsv(bpn(j))
351 xx = x(1,nn)+dt2*(v(1,nn)+dt12*a(1,nn))
352 yy = x(2,nn)+dt2*(v(2,nn)+dt12*a(2,nn))
353 zz = x(3,nn)+dt2*(v(3,nn)+dt12*a(3,nn))
354 dist = 0.
355 dist =
max(eminx(1,le)-xx,xx-eminx(4,le),dist)
356 dist =
max(eminx(2,le)-yy,yy-eminx(5,le),dist)
357 dist =
max(eminx(3,le)-zz,zz-eminx(6,le),dist)
358 IF(dist<tzinf)THEN
359 IF(n8>=1.AND.n8<=numels8)THEN
360 IF(nn/=ixs(2,ne).AND.nn/=ixs(3,ne).AND.
361 & nn/=ixs(4,ne).AND.nn/=ixs(5,ne).AND.
362 & nn/=ixs(6,ne).AND.nn/=ixs(7,ne).AND.
363 & nn/=ixs(8,ne).AND.nn/=ixs(9,ne))THEN
364 i_stok = i_stok + 1
365 prov_n(i_stok) = bpn(j)
366 prov_e(i_stok) = le
367 IF(i_stok==mvsiz-1)
CALL i16sto(
368 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
369 2 cont ,mx_cand )
370 IF(cont==-2)RETURN
371 ENDIF
372 ELSEIF(n10>=1.AND.n10<=numels8)THEN
373 IF(nn/=ixs(2,ne).AND.nn/=ixs(4,ne).AND.
374 & nn/=ixs(7,ne).AND.nn/=ixs(6,ne).AND.
375 & nn/=ixs10(1,n10).AND.nn/=ixs10(2,n10).AND.
376 & nn/=ixs10(3,n10).AND.nn/=ixs10(4,n10).AND.
377 & nn/=ixs10(5,n10).AND.nn/=ixs10(6,n10))THEN
378 i_stok = i_stok + 1
379 prov_n(i_stok) = bpn(j)
380 prov_e(i_stok) = le
381 IF(i_stok==mvsiz-1)
CALL i16sto(
382 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
383 2 cont ,mx_cand )
384 IF(cont==-2)RETURN
385 ENDIF
386 ELSEIF(n16>=1.AND.n16<=numels16)THEN
387 IF(nn/=ixs(2,ne).AND.nn/=ixs(3,ne).AND.
388 & nn/=ixs(4,ne).AND.nn/=ixs(5,ne).AND.
389 & nn/=ixs(6,ne).AND.nn/=ixs(7,ne).AND.
390 & nn/=ixs(8,ne).AND.nn/=ixs(9,ne).AND.
391 & nn/=ixs16(1,n16).AND.nn/=ixs16(2,n16).AND.
392 & nn/=ixs16(3,n16).AND.nn/=ixs16(4,n16).AND.
393 & nn/=ixs16(5,n16).AND.nn/=ixs16(6,n16).AND.
394 & nn/=ixs16(7,n16).AND.nn/=ixs16(8,n16))THEN
395 i_stok = i_stok + 1
396 prov_n(i_stok) = bpn(j)
397 prov_e(i_stok) = le
398 IF(i_stok==mvsiz-1)
CALL i16sto(
399 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
400 2 cont ,mx_cand )
401 IF(cont==-2)RETURN
402 ENDIF
403 ELSEIF(n20>=1.AND.n20<=numels20)THEN
404 IF(nn/=ixs(2,ne).AND.nn/=ixs(3,ne).AND.
405 & nn/=ixs(4,ne).AND.nn/=ixs(5,ne).AND.
406 & nn/=ixs(6,ne).AND.nn/=ixs(7,ne).AND.
407 & nn/=ixs(8,ne).AND.nn/=ixs(9,ne).AND.
408 & nn/=ixs20(1,n20) .AND.nn/=ixs20(2,n20) .AND.
409 & nn/=ixs20(3,n20) .AND.nn/=ixs20(4,n20) .AND.
410 & nn/=ixs20(5,n20) .AND.nn/=ixs20(6,n20) .AND.
411 & nn/=ixs20(7,n20) .AND.nn/=ixs20(8,n20) .AND.
412 & nn/=ixs20(9,n20) .AND.nn/
413 & nn/=ixs20(11,n20).AND.nn/=ixs20(12,n20))THEN
414 i_stok = i_stok + 1
415 prov_n(i_stok) = bpn(j)
416 prov_e(i_stok) = le
417 IF(i_stok==mvsiz-1)
CALL i16sto(
418 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
419 2 cont ,mx_cand )
420 IF(cont==-2)RETURN
421 ENDIF
422 ENDIF
423 ENDIF
424 ENDDO
425
426 ELSE
427
428
429
430
431
432
433
434
435
436
437 dir = 1
438 IF(dy==dsup) THEN
439 dir = 2
440 ELSE IF(dz==dsup) THEN
441 dir = 3
442 ENDIF
443 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*0.5
444
445
446
447 nb_ncn= 0
448 nb_ncn1= 0
449 addnn= add(1,i_add)
450#include "vectorize.inc"
451 DO i=1,nb_nc
452 IF(x(dir,nsv(bpn(i)))<seuil) THEN
453
454 nb_ncn1 = nb_ncn1 + 1
455 addnn = addnn + 1
456 pn(addnn) = bpn(i)
457 ENDIF
458 ENDDO
459#include "vectorize.inc"
460 DO i=1,nb_nc
461 IF(x(dir,nsv(bpn(i)))>=seuil) THEN
462 nb_ncn = nb_ncn + 1
463 bpn(nb_ncn) = bpn(i)
464
465 ENDIF
466 ENDDO
467
468
469
470 nb_ecn= 0
471 addne= add(2,i_add)
472 IF(nb_ncn1==0) THEN
473
474#include "vectorize.inc"
475 DO i=1,nb_ec
476 le = bpe(i)
477 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
478
479 nb_ecn = nb_ecn + 1
480 bpe(nb_ecn) = le
481 ENDIF
482 ENDDO
483 ELSEIF(nb_ncn==0) THEN
484
485#include "vectorize.inc"
486 DO i=1,nb_ec
487 le = bpe(i)
488 IF(eminx(dir,le)-tzinf<seuil) THEN
489
490 addne = addne + 1
491 pe(addne) = le
492 ENDIF
493 ENDDO
494 ELSE
495#include "vectorize.inc"
496 DO i=1,nb_ec
497 le = bpe(i)
498 IF(eminx(dir,le)-tzinf<seuil) THEN
499
500 addne = addne + 1
501 pe(addne) = le
502 ENDIF
503 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
504
505 nb_ecn = nb_ecn + 1
506 bpe(nb_ecn) = le
507 ENDIF
508 ENDDO
509 ENDIF
510
511
512
513 add(1,i_add+1) = addnn
514 add(2,i_add+1) = addne
515
516 xyzm(1,i_add+1) = xyzm(1,i_add)
517 xyzm(2,i_add+1) = xyzm(2,i_add)
518 xyzm(3,i_add+1) = xyzm(3,i_add)
519 xyzm(4,i_add+1) = xyzm(4,i_add)
520 xyzm(5,i_add+1) = xyzm(5,i_add)
521 xyzm(6,i_add+1) = xyzm(6,i_add)
522 xyzm(dir,i_add+1) = seuil
523 xyzm(dir+3,i_add) = seuil
524
525 nb_nc = nb_ncn
526 nb_ec = nb_ecn
527
528 i_add = i_add + 1
529 IF(i_add+1>=i_add_max) THEN
530 cont = -3
531 RETURN
532 ENDIF
533
534 cont=1
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549 RETURN
550
551 ENDIF
552 ENDIF
553
554
555
556 IF (i_add==1) THEN
557 cont = 0
558 RETURN
559 ENDIF
560
561
562
563
564
565
566
567
568 i_add = i_add - 1
569
570
571
572
573
574
575 nb_nc = add(1,i_add+1) - add(1,i_add)
576 DO i=1,nb_nc
577 bpn(i) = pn(add(1,i_add)+i)
578 ENDDO
579
580
581
582 nb_ec = add(2,i_add+1) - add(2,i_add)
583 DO i=1,nb_ec
584 bpe(i) = pe(add(2,i_add)+i)
585 ENDDO
586
587 cont=1
588 RETURN
589
subroutine i16sto(i_stok, i_stok_glob, prov_n, cand_n, prov_e, cand_e, cont, mx_cand)