38
39
40
41
43 USE intbufdef_mod
46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "scr17_c.inc"
54#include "com04_c.inc"
55
56
57
58 INTEGER ITAB(*), NOD2NSV(*), NOD2RTM(*), KAD(*), TAGNOD(*), TAGRTM(*),
59 . IADD(*)
60 INTEGER NRTM, NRTM0, , NISUBS, NISUBM, NOINT, NI, NT19
61 INTEGER NOM_OPT(LNOPT1,*)
62
63 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
64
65
66
67 INTEGER I,J,K,JGRN,ISU,ISU1,ISU2,
68 . JSUB, KSUB, NNE, IS, ISV, CUR, ID1,
69 . NEXT, IM, KM, JAD, IN, II, N,STAT,K1,K2,INOD,IFNRT
70 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1
71
72 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
73 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
74 TYPE (SURF_) , DIMENSION(NSLIN) ::
75
76
77
78 INTEGER BITSET
80
81
82
83 intbuf_tab(ni)%ADDSUBS(1:nsn+1) = 0
84 intbuf_tab(ni)%ADDSUBM(1:nrtm+1) = 0
85
86 intbuf_tab(ni)%INFLG_SUBS(1:nisubs)=0
87 intbuf_tab(ni)%INFLG_SUBM(1:nisubm)=0
88
89
90
91
92
93 nod2nsv(1:numnod) = 0
94 DO is=1,nsn
95 isv = intbuf_tab(ni)%NSV(is)
96 IF (isv>numnod) cycle
97 nod2nsv(isv)=is
98 END DO
99
100 ksub=0
101 DO jsub=1,nintsub
102 id1=nom_opt(1,ninter+jsub)
103 CALL fretitl2(titr1, nom_opt(lnopt1-ltitr+1,ninter+jsub),ltitr)
104 IF(nom_opt(2,ninter+jsub)==noint
105 . .AND.nom_opt(5,ninter+jsub)==1)THEN
106 ksub=ksub+1
107
108
109 intbuf_tab(ni)%LISUB(ksub) = jsub
110 intbuf_tab(ni)%TYPSUB(ksub) = 1
111
112
113
114
115 IF (nt19==0) THEN
116
117 jgrn =nom_opt(4,ninter+jsub)
118 nne =igrnod(jgrn)%NENTITY
119
120 DO i=1,nne
121 isv=igrnod(jgrn)%ENTITY(i)
122 is =nod2nsv(isv)
123 IF(is==0)THEN
125 . msgtype=msgerror,
126 . anmode=aninfo_blind_1,
127 . i1=id1,
128 . c1=titr1,
129 . i2=itab(isv),
130 . i3=noint)
131 ELSE
132 intbuf_tab(ni)%ADDSUBS(is) =
133 . intbuf_tab(ni)%ADDSUBS(is)+1
134 END IF
135 END DO
136
137 ELSE
138
139 IF (nt19==-1) THEN
140 isu =nom_opt(4,ninter+jsub)
141 ELSE
142
143 isu =nom_opt(3,ninter+jsub)
144 ENDIF
145
147 nne =igrsurf(isu)%NSEG
148
149 DO i=1,nne
150 km=1
151 DO j=1,4
152 in = igrsurf(isu)%NODES(i,j)
153 is = nod2nsv(in)
154 IF (is==0) THEN
155 km = 0
156 ELSE
158 intbuf_tab(ni)%ADDSUBS(is) = intbuf_tab(ni)%ADDSUBS(is)+1
160 ENDIF
161 ENDIF
162 END DO
163
164 IF ((km==0).AND.(nt19==-1)) THEN
166 . msgtype=msgerror,
167 . anmode=aninfo_blind_1,
168 . i1=id1,
169 . c1=titr1,
170 . i2=itab(igrsurf(isu)%NODES(i,1)),
171 . i3=itab(igrsurf(isu)%NODES(i,2)),
172 . i4=itab(igrsurf(isu)%NODES(i,3)),
173 . i5=itab(igrsurf(isu)%NODES(i,4)),
174 . i6=noint)
175 END IF
176 END DO
177
178 ENDIF
179
180
181
182 ELSEIF(nom_opt(2,ninter+jsub) == 0
183 . .AND. nom_opt(5,ninter+jsub) == 1) THEN
184
185 ksub=ksub+1
186
187
188 intbuf_tab(ni)%LISUB (ksub) = jsub
189
190
191
192
194
195 isu2 =nom_opt(6,ninter+jsub)
196 IF(isu2/=0)THEN
197 intbuf_tab(ni)%TYPSUB(ksub) = 2
198
199 DO i=1,igrsurf(isu2)%NSEG
200 DO k=1,4
201 in=igrsurf(isu2)%NODES(i,k)
202 is =nod2nsv(in)
203 IF(is/=0.AND.
tagnod(in)==0)
THEN
204 intbuf_tab(ni)%ADDSUBS(is) =
205 . intbuf_tab(ni)%ADDSUBS(is)+1
207 END IF
208 ENDDO
209 ENDDO
210 ENDIF
211
212 isu1 =nom_opt(3,ninter+jsub)
213 IF(isu1/=0)THEN
214 intbuf_tab(ni)%TYPSUB(ksub) = 3
215
216 DO i=1,igrsurf(isu1)%NSEG
217 DO k=1,4
218 in=igrsurf(isu1)%NODES(i,k)
219 is =nod2nsv(in)
220 IF(is/=0.AND.
tagnod(in)==0)
THEN
221 intbuf_tab(ni)%ADDSUBS(is) =
222 . intbuf_tab(ni)%ADDSUBS(is)+1
224 END IF
225 ENDDO
226 ENDDO
227 ENDIF
228
229
230 END IF
231
232
233 END DO
234
235
236
237 cur=1
238 DO is=1,nsn
239 next = cur+intbuf_tab(ni)%ADDSUBS(is)
240 intbuf_tab(ni)%ADDSUBS(is)= cur
241 cur = next
242 END DO
243 intbuf_tab(ni)%ADDSUBS(1+nsn)=cur
244
245
246 DO is=1,nsn
247 kad(is)=intbuf_tab(ni)%ADDSUBS(is)
248 END DO
249
250
251
252
253 ksub=0
254 DO jsub=1,nintsub
255 IF(nom_opt(2,ninter+jsub)==noint
256 . .AND.nom_opt(5,ninter+jsub)==1)THEN
257 ksub=ksub+1
258
259
260
261
262 IF (nt19==0) THEN
263
264 jgrn =nom_opt(4,ninter+jsub)
265 nne =igrnod(jgrn)%NENTITY
266 DO i=1,nne
267 isv=igrnod(jgrn)%ENTITY(i)
268 is =nod2nsv(isv)
269 IF(is/=0)THEN
270 intbuf_tab(ni)%LISUBS(kad(is))=ksub
271 kad(is)=kad(is)+1
272 END IF
273 END DO
274
275 ELSE
276
277 IF (nt19==-1) THEN
278 isu =nom_opt(4,ninter+jsub)
279 ELSE
280
281 isu =nom_opt(3,ninter+jsub)
282 ENDIF
283
285 nne =igrsurf(isu)%NSEG
286 DO i=1,nne
287 DO j=1,4
288 in = igrsurf(isu)%NODES(i,j)
289 is = nod2nsv(in)
290 IF ((is/=0).AND.(
tagnod(in)==0))
THEN
291 intbuf_tab(ni)%LISUBS(kad(is))=ksub
292 kad(is)=kad(is)+1
294 ENDIF
295 END DO
296 ENDDO
297
298 ENDIF
299
300
301
302 ELSEIF(nom_opt(2,ninter+jsub) == 0
303 . .AND. nom_opt(5,ninter+jsub) == 1) THEN
304
305 ksub=ksub+1
306
307
308
309
311
312 isu2 =nom_opt(6,ninter+jsub)
313 IF(isu2/=0)THEN
314
315 DO i=1,igrsurf(isu2)%NSEG
316 DO k=1,4
317 in=igrsurf(isu2)%NODES(i,k)
318 is =nod2nsv(in)
319 IF (is/=0)THEN
321 intbuf_tab(ni)%INFLG_SUBS(kad(is))=
322 .
bitset(intbuf_tab(ni)%INFLG_SUBS(kad(is)),0)
323 intbuf_tab(ni)%LISUBS(kad(is))=ksub
324 kad(is)=kad(is)+1
326 ELSE
327 intbuf_tab(ni)%INFLG_SUBS(kad(is)-1)=
328 .
bitset(intbuf_tab(ni)%INFLG_SUBS(kad(is)-1),0)
329 ENDIF
330 ENDIF
331 ENDDO
332 ENDDO
333 ENDIF
334
335
336 isu1 =nom_opt(3,ninter+jsub)
337 IF(isu1/=0)THEN
338
339 DO i=1,igrsurf(isu1)%NSEG
340 DO k=1,4
341 in=igrsurf(isu1)%NODES(i,k)
342 is =nod2nsv(in)
343 IF (is/=0)THEN
345 intbuf_tab(ni)%INFLG_SUBS(kad(is))=
346 .
bitset(intbuf_tab(ni)%INFLG_SUBS(kad(is)),1)
347 intbuf_tab(ni)%LISUBS(kad(is))=ksub
348 kad(is)=kad(is)+1
350 ELSE
351 intbuf_tab(ni)%INFLG_SUBS(kad(is)-1)=
352 .
bitset(intbuf_tab(ni)%INFLG_SUBS(kad(is)-1),1)
353 ENDIF
354 ENDIF
355 ENDDO
356 ENDDO
357 ENDIF
358
359 END IF
360 END DO
361
362
363
364
365
366
367 iadd(1:numnod+1) = 0
368 DO im=1,nrtm0
369 in =intbuf_tab(ni)%IRECTM(4*(im-1)+1)
370 iadd(in) =iadd(in)+1
371 in =intbuf_tab(ni)%IRECTM(4*(im-1)+2)
372 iadd(in) =iadd(in)+1
373 in =intbuf_tab(ni)%IRECTM(4*(im-1)+3)
374 iadd(in) =iadd(in)+1
375 in =intbuf_tab(ni)%IRECTM(4*(im-1)+4)
376 iadd(in) =iadd(in)+1
377 END DO
378
379 cur=1
380 DO i=1,numnod
381 next =cur+iadd(i)
382 iadd(i) =cur
383 cur =next
384 END DO
385 iadd(numnod+1)=cur
386
387
388 DO i=1,numnod
389 kad(i)=iadd(i)
390 END DO
391
392
393 DO im=1,nrtm0
394 in =intbuf_tab(ni)%IRECTM(4*(im-1)+1)
395 nod2rtm(kad(in)) = im
396 kad(in) = kad(in) + 1
397 in =intbuf_tab(ni)%IRECTM(4*(im-1)+2)
398 nod2rtm(kad(in)) = im
399 kad(in) = kad(in) + 1
400 in =intbuf_tab(ni)%IRECTM(4*(im-1)+3)
401 nod2rtm(kad
402 kad(in) = kad(in) + 1
403 in =intbuf_tab(ni)%IRECTM(4*(im
404 nod2rtm(kad(in)) = im
405 kad(in) = kad(in) + 1
406 ENDDO
407
408
409 ksub=0
410 DO jsub=1,nintsub
411
412 id1=nom_opt(1,ninter+jsub)
414 . nom_opt(lnopt1-ltitr+1,ninter+jsub),ltitr)
415
416 IF(nom_opt(2,ninter+jsub)==noint
417 . .AND.nom_opt(5,ninter+jsub)==1)THEN
418 ksub=ksub+1
419
420 tagrtm(1:nrtm0) = 0
421
422 IF (nt19<1) THEN
423 isu =nom_opt(3,ninter+jsub)
424 ELSE
425
426 isu =nom_opt(4,ninter+jsub)
427 ENDIF
428 nne =igrsurf(isu)%NSEG
429
430 DO i=1,nne
431
432 in=igrsurf(isu)%NODES(i,1)
433 km=0
434 DO 110 jad=iadd(in),iadd(in+1)-1
435 im = nod2rtm(jad)
436 DO 100 j=1,4
437 ii=igrsurf(isu)%NODES(i,j)
438 IF(j==4.AND.ii==0)THEN
439 GO TO 100
440 ELSE
441 DO k=1,4
442 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) GOTO 100
443 END DO
444 GOTO 110
445 END IF
446 100 CONTINUE
447 km=im
448 GO TO 120
449 110 CONTINUE
450 120 CONTINUE
451 IF(km==0)THEN
452 IF (nt19==0) THEN
454 . msgtype=msgerror,
455 . anmode=aninfo_blind_1,
456 . i1=id1,
457 . c1=titr1,
458 . i2=itab(igrsurf(isu)%NODES(i,1)),
459 . i3=itab(igrsurf(isu)%NODES(i,2)),
460 . i4=itab(igrsurf(isu)%NODES(i,3)),
461 . i5=itab(igrsurf(isu)%NODES(i,4)),
462 . i6=noint)
463 ELSEIF (nt19==-1) THEN
465 . msgtype=msgerror,
466 . anmode=aninfo_blind_1,
467 . i1=id1,
468 . c1=titr1,
469 . i2=itab(igrsurf(isu)%NODES(i,1)),
470 . i3=itab(igrsurf(isu)%NODES(i,2)),
471 . i4=itab(igrsurf(isu)%NODES(i,3)),
472 . i5=itab(igrsurf(isu)%NODES(i,4)),
473 . i6=noint)
474 ENDIF
475 ELSEIF(tagrtm(km)==0)THEN
476 intbuf_tab(ni)%ADDSUBM(km)=intbuf_tab(ni)%ADDSUBM(km)+1
477 tagrtm(km)=1
478 END IF
479 END DO
480
481
482
483
484
485 ELSEIF(nom_opt(2,ninter+jsub) == 0
486 . .AND. nom_opt(5,ninter+jsub) == 1) THEN
487
488 ksub=ksub+1
489
490 tagrtm(1:nrtm0) = 0
491
492 isu1 =nom_opt(3,ninter+jsub)
493
494 IF(isu1 > 0 ) THEN
495 intbuf_tab(ni)%TYPSUB(ksub) = 3
496
497 nne =igrsurf(isu1)%NSEG
498 DO i=1,nne
499 in=igrsurf(isu1)%NODES(i,1)
500 km=0
501
502 DO jad=iadd(in),iadd(in+1)-1
503 im = nod2rtm(jad)
504 ifnrt = 0
505 DO j=1,4
506 ii=igrsurf(isu1)%NODES(i,j)
507 IF(j/=4.OR.ii/=0)THEN
508 DO k=1,4
509 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) ifnrt = ifnrt + 1
510 END DO
511 ENDIF
512 ENDDO
513
514 IF(ifnrt >= 3) THEN
515 km=im
516 EXIT
517 ENDIF
518
519 ENDDO
520
521 IF(km/=0.AND.tagrtm(km)==0)THEN
522 intbuf_tab(ni)%ADDSUBM(km)=intbuf_tab(ni)%ADDSUBM(km)+1
523 tagrtm(km)=1
524 END IF
525
526 END DO
527
528 ENDIF
529
530 isu2 =nom_opt(6,ninter+jsub)
531
532 IF(isu2 > 0 ) THEN
533
534 nne =igrsurf(isu2)%NSEG
535 DO i=1,nne
536 in=igrsurf(isu2)%NODES(i,1)
537 km=0
538
539 DO jad=iadd(in),iadd(in+1)-1
540 im = nod2rtm(jad)
541 ifnrt = 0
542 DO j=1,4
543 ii=igrsurf(isu2)%NODES(i,j)
544 IF(j/=4.OR.ii/=0)THEN
545 DO k=1,4
546 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) ifnrt = ifnrt + 1
547 END DO
548 ENDIF
549 ENDDO
550
551 IF(ifnrt >= 3) THEN
552 km=im
553 EXIT
554 ENDIF
555
556 ENDDO
557
558 IF(km/=0)THEN
559 IF(tagrtm(km)==0)THEN
560 intbuf_tab(ni)%ADDSUBM(km)=intbuf_tab(ni)%ADDSUBM(km)+1
561 tagrtm(km)=1
562 ENDIF
563 END IF
564
565 END DO
566
567 ENDIF
568
569
570
571 END IF
572 END DO
573
574 cur=1
575 DO im=1,nrtm0
576 next =cur+intbuf_tab(ni)%ADDSUBM(im)
577 intbuf_tab(ni)%ADDSUBM(im)=cur
578 cur =next
579 END DO
580 intbuf_tab(ni)%ADDSUBM(nrtm0+1:nrtm+1)=cur
581
582
583 DO im=1,nrtm0
584 kad(im)=intbuf_tab(ni)%ADDSUBM(im)
585 END DO
586
587
588
589 ksub=0
590 DO jsub=1,nintsub
591
592 IF(nom_opt(2,ninter+jsub)==noint
593 . .AND.nom_opt(5,ninter+jsub)==1)THEN
594
595 ksub=ksub+1
596
597 tagrtm(1:nrtm0) = 0
598
599 IF (nt19<1) THEN
600 isu =nom_opt(3,ninter+jsub)
601 ELSE
602
603 isu =nom_opt(4,ninter+jsub)
604 ENDIF
605 nne =igrsurf(isu)%NSEG
606 DO i=1,nne
607 in=igrsurf(isu)%NODES(i,1)
608 km=0
609 DO 210 jad=iadd(in),iadd(in+1)-1
610 im = nod2rtm(jad)
611 DO 200 j=1,4
612 ii=igrsurf(isu)%NODES(i,j)
613 IF(j==4.AND.ii==0)THEN
614 GO TO 200
615 ELSE
616 DO k=1,4
617 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) GOTO 200
618 END DO
619 GOTO 210
620 END IF
621 200 CONTINUE
622 km=im
623 GOTO 220
624 210 CONTINUE
625 220 CONTINUE
626 IF(km/=0.AND.tagrtm(im)==0)THEN
627 intbuf_tab(ni)%LISUBM(kad(im))=ksub
628 kad(im)=kad(im)+1
629 tagrtm(im)=1
630 END IF
631 END DO
632
633
634
635
636 ELSEIF(nom_opt(2,ninter+jsub) == 0
637 . .AND. nom_opt(5,ninter+jsub) == 1) THEN
638
639 ksub=ksub+1
640
641 tagrtm(1:nrtm0) = 0
642
643 isu1 =nom_opt(3,ninter+jsub)
644 IF(isu1 > 0 ) THEN
645
646 nne =igrsurf(isu1)%NSEG
647 DO i=1,nne
648 in=igrsurf(isu1)%NODES(i,1)
649 km=0
650
651 DO jad=iadd(in),iadd(in+1)-1
652 im = nod2rtm(jad)
653 ifnrt = 0
654 DO j=1,4
655 ii=igrsurf(isu1)%NODES(i,j)
656 IF(j/=4.OR.ii/=0)THEN
657 DO k=1,4
658 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) ifnrt = ifnrt + 1
659 END DO
660 ENDIF
661 ENDDO
662 IF(ifnrt >= 3) THEN
663 km=im
664 EXIT
665 ENDIF
666 ENDDO
667
668 IF(km/=0)THEN
669 IF(tagrtm(im)==0)THEN
670 intbuf_tab(ni)%INFLG_SUBM(kad(im))=
671 .
bitset(intbuf_tab(ni)%INFLG_SUBM(kad(im)),1)
672 intbuf_tab(ni)%LISUBM(kad(im))=ksub
673 kad(im)=kad(im)+1
674 tagrtm(im)=1
675 ENDIF
676 END IF
677 END DO
678
679 ENDIF
680
681 isu2 =nom_opt(6,ninter+jsub)
682
683 IF(isu2 > 0 ) THEN
684
685 nne =igrsurf(isu2)%NSEG
686 DO i=1,nne
687 in=igrsurf(isu2)%NODES(i,1)
688 km=0
689
690 DO jad=iadd(in),iadd(in+1)-1
691 im = nod2rtm(jad)
692 ifnrt = 0
693 DO j=1,4
694 ii=igrsurf(isu2)%NODES(i,j)
695 IF(j/=4.OR.ii/=0)THEN
696 DO k=1,4
697 IF(intbuf_tab(ni)%IRECTM(4*(im-1)+k)==ii) ifnrt = ifnrt + 1
698 END DO
699 ENDIF
700 ENDDO
701 IF(ifnrt >= 3) THEN
702 km=im
703 EXIT
704 ENDIF
705 ENDDO
706
707 IF(km/=0)THEN
708 IF(tagrtm(im)==0)THEN
709 intbuf_tab(ni)%INFLG_SUBM(kad(im))=
710 .
bitset(intbuf_tab(ni)%INFLG_SUBM(kad(im)),0)
711 intbuf_tab(ni)%LISUBM(kad(im))=ksub
712 kad(im)=kad(im)+1
713 tagrtm(im)=1
714 ELSE
715 intbuf_tab(ni)%INFLG_SUBM(kad(im)-1)=
716 .
bitset(intbuf_tab(ni)%INFLG_SUBM(kad(im)-1),0)
717 END IF
718 END IF
719 END DO
720
721 ENDIF
722 END IF
723 END DO
724
725
726
727 RETURN
integer function bitset(i, n)
integer, parameter nchartitle
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)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)