194
195
196
198 use element_mod , only : nixs
199
200
201
202#include "implicit_f.inc"
203
204
205
206#include "mvsiz_p.inc"
207
208
209
210#include "com01_c.inc"
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
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 INTEGER ,NB_EC,I_ADD,MAXSIZ,I_STOK_GLOB,I_STOK,MX_CAND,NIN,
259 . NB_N_B,I_ADD_MAX,CONT ,IXS(NIXS,*),IXS16(8,*),
260 . ADD(2,*),BPE(*),PE(*),BPN(*),PN(*),
261 . CAND_N(*),CAND_E(*),NELEM(*),NELES(*),
262 . PROV_N(*) ,PROV_E(*) ,(12,*),MAXSIZS, NMES
263
265 . x(3,*),v(3,*),a(3,*),xyzm(6,*),eminx(6,*),eminxs(6,*),
266 . minbox,tzinf
267
268
269
270 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,
271 . NES,NE,LE,LES,L,NCAND_PROV,LESL
272
274 . dx,dy,dz,dsup,seuil
275
276
277
278
279
280
281
282
283
284
285 IF(add(2,i_add)+nb_ec>maxsiz) THEN
286
287 cont = -1
288
289
290
291
292
293 RETURN
294 ENDIF
295 IF(add(1,i_add)+nb_nc>maxsizs) THEN
296
297 cont = -1
298 RETURN
299 ENDIF
300
301
302
303 IF(nb_ec/=0.AND.nb_nc/=0) THEN
304
305 dx = xyzm(4,i_add) - xyzm(1,i_add)
306 dy = xyzm(5,i_add) - xyzm(2,i_add)
307 dz = xyzm(6,i_add) - xyzm(3,i_add)
309
310
311
312
313
314
315
316
317 IF(nb_ec+nb_nc<=128) THEN
318 ncand_prov = nb_ec*nb_nc
319 ELSE
320 ncand_prov = 129
321 ENDIF
322
323 IF(dsup<minbox.OR.nb_nc<=nb_n_b.OR.ncand_prov<=128)THEN
324
325 ncand_prov = nb_ec*nb_nc
326 DO l=1,ncand_prov
327 i = 1+(l-1)/nb_nc
328 j = l-(i-1)*nb_nc
329 le = bpe(i)
330 les = bpn(j)
331 ne = nelem(le)
332 IF(les<=nmes)THEN
333 nes = neles(les)
334 IF(ne/=nes.AND.
335 . eminxs(4,les)>eminx(1,le)-tzinf.AND.
336 . eminxs(5,les)>eminx(2,le)-tzinf.AND.
337 . eminxs(6,les)>eminx(3,le)-tzinf.AND.
338 . eminxs(1,les)<eminx(4,le)+tzinf.AND.
339 . eminxs(2,les)<eminx(5,le)+tzinf.AND.
340 . eminxs(3,les)<eminx(6,le)+tzinf)THEN
341 i_stok = i_stok + 1
342 prov_n(i_stok) = les
343 prov_e(i_stok) = le
344 IF(i_stok==mvsiz-1)
CALL i17sto(
345 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
346 2 cont ,mx_cand )
347 IF(cont==-2)RETURN
348 ENDIF
349 ELSE
350 lesl = les-nmes
351 IF(xrem(4,lesl)>eminx(1,le)-tzinf.AND.
352 . xrem(5,lesl)>eminx(2,le)-tzinf.AND.
353 . xrem(6,lesl)>eminx(3,le)-tzinf.AND.
354 . xrem(1,lesl)<eminx(4,le)+tzinf.AND.
355 . xrem(2,lesl)<eminx(5,le)+tzinf.AND.
356 . xrem(3,lesl)<eminx(6,le)+tzinf)THEN
357 i_stok = i_stok + 1
358 prov_n(i_stok) = les
359 prov_e(i_stok) = le
360 IF(i_stok==mvsiz-1)
CALL i17sto(
361 1 i_stok,i_stok_glob,prov_n,cand_n,prov_e,cand_e,
362 2 cont ,mx_cand )
363 IF(cont==-2)RETURN
364 ENDIF
365 END IF
366 ENDDO
367
368 ELSE
369
370
371
372
373
374
375
376
377
378
379 dir = 1
380 IF(dy==dsup) THEN
381 dir = 2
382 ELSE IF(dz==dsup) THEN
383 dir = 3
384 ENDIF
385 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*half
386
387
388
389 nb_ncn= 0
390 nb_ncn1= 0
391 addnn= add(1,i_add)
392 nb_ecn= 0
393 addne= add(2,i_add)
394#include "vectorize.inc"
395 DO i=1,nb_nc
396 les = bpn(i)
397 IF(les<=nmes)THEN
398 IF(eminxs(dir,les)<seuil) THEN
399
400 nb_ncn1 = nb_ncn1 + 1
401 addnn = addnn + 1
402 pn(addnn) = les
403 ENDIF
404 END IF
405 ENDDO
406 IF(nspmd>1)THEN
407#include "vectorize.inc"
408 DO i=1,nb_nc
409 les = bpn(i)
410 IF(les>nmes)THEN
411 lesl = les-nmes
412 IF(xrem(dir,lesl)<seuil) THEN
413
414 nb_ncn1 = nb_ncn1 + 1
415 addnn = addnn + 1
416 pn(addnn) = les
417 END IF
418 END IF
419 END DO
420 END IF
421
422#include "vectorize.inc"
423 DO i=1,nb_nc
424 les = bpn(i)
425 IF(les<=nmes)THEN
426 IF(eminxs(dir+3,les)>=seuil) THEN
427
428 nb_ncn = nb_ncn + 1
429 bpn(nb_ncn) = les
430 ENDIF
431 ENDIF
432 ENDDO
433 IF(nspmd>1)THEN
434#include "vectorize.inc"
435 DO i=1,nb_nc
436 les = bpn(i)
437 IF(les>nmes)THEN
438 lesl = les-nmes
439 IF(xrem(dir+3,lesl)>=seuil) THEN
440
441 nb_ncn = nb_ncn + 1
442 bpn(nb_ncn) = les
443 ENDIF
444 ENDIF
445 ENDDO
446 END IF
447
448
449
450 nb_ecn= 0
451 addne= add(2,i_add)
452 IF(nb_ncn1==0) THEN
453
454#include "vectorize.inc"
455 DO i=1,nb_ec
456 le = bpe(i)
457 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
458
459 nb_ecn = nb_ecn + 1
460 bpe(nb_ecn) = le
461 ENDIF
462 ENDDO
463 ELSEIF(nb_ncn==0) THEN
464
465#include "vectorize.inc"
466 DO i=1,nb_ec
467 le = bpe(i)
468 IF(eminx(dir,le)-tzinf<seuil) THEN
469
470 addne = addne + 1
471 pe(addne) = le
472 ENDIF
473 ENDDO
474 ELSE
475#include "vectorize.inc"
476 DO i=1,nb_ec
477 le = bpe(i)
478 IF(eminx(dir,le)-tzinf<seuil) THEN
479
480 addne = addne + 1
481 pe(addne) = le
482 ENDIF
483 IF(eminx(dir+3,le)+tzinf>=seuil) THEN
484
485
486 bpe(nb_ecn) = le
487 ENDIF
488 ENDDO
489 ENDIF
490
491
492
493 add(1,i_add+1) = addnn
494 add(2,i_add+1) = addne
495
496 xyzm(1,i_add+1) = xyzm(1,i_add)
497 xyzm(2,i_add+1) = xyzm(2,i_add)
498 xyzm(3,i_add+1) = xyzm(3,i_add)
499 xyzm(4,i_add+1) = xyzm(4,i_add)
500 xyzm(5,i_add+1) = xyzm(5,i_add)
501 xyzm(6,i_add+1) = xyzm(6,i_add)
502 xyzm(dir,i_add+1) = seuil
503 xyzm(dir+3,i_add) = seuil
504
505 nb_nc = nb_ncn
506 nb_ec = nb_ecn
507
508 i_add = i_add + 1
509 IF(i_add+1>=i_add_max) THEN
510 cont = -3
511 RETURN
512 ENDIF
513
514 cont=1
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529 RETURN
530
531 ENDIF
532 ENDIF
533
534
535
536 IF (i_add==1) THEN
537 cont = 0
538 RETURN
539 ENDIF
540
541
542
543
544
545
546
547
548 i_add = i_add - 1
549
550
551
552
553
554 nb_nc = add(1,i_add+1) - add(1,i_add)
555 DO i=1,nb_nc
556 bpn(i) = pn(add(1,i_add)+i)
557 ENDDO
558
559
560
561 nb_ec = add(2,i_add+1) - add(2,i_add)
562 DO i=1,nb_ec
563 bpe(i) = pe(add(2,i_add)+i)
564 ENDDO
565
566 cont=1
567 RETURN
568
subroutine i17sto(i_stok, i_stok_glob, prov_n, cand_n, prov_e, cand_e, cont, mx_cand)