5 &(npoin,nelem,neleb,nelmax,ielm,mxelvs,ikle,iklbor,
7 & gloseg,maxseg,glosegbor,maxsegbor,nseg,nsegbor,
8 & eltseg,eltsegbor,oriseg,orisegbor,
49 INTEGER,
INTENT(IN) :: NELMAX,IELM
50 INTEGER,
INTENT(IN) :: NPOIN,NELEM,NELEB,MXELVS,NPTFR
51 INTEGER,
INTENT(IN) :: MAXSEG,MAXSEGBOR
52 INTEGER,
INTENT(INOUT) :: NSEG,NSEGBOR
53 INTEGER,
INTENT(IN) :: IKLE(nelmax,4),IKLBOR(neleb,3)
54 INTEGER,
INTENT(IN) :: NBOR(nptfr)
55 INTEGER,
INTENT(INOUT) :: GLOSEG(maxseg,2),GLOSEGBOR(maxsegbor,2)
56 INTEGER,
INTENT(INOUT) :: ELTSEG(nelmax,6),ELTSEGBOR(neleb,3)
57 INTEGER,
INTENT(INOUT) :: ORISEG(nelmax,6),ORISEGBOR(neleb,3)
58 INTEGER,
INTENT(IN) :: KNOLG(npoin)
59 INTEGER,
INTENT(INOUT) :: NDS(0:81,7)
63 INTEGER NSE,NSEBOR,NSEBOR2,XSEG,COUNT
65 INTEGER I,J,IKL,I1,I2,J1,J2,IG1,IG2,IK1,IK2
66 INTEGER IELEM,IVOIS,IELEB,IVOISB
68 INTEGER,
DIMENSION(:,:),
ALLOCATABLE ::IND_ELEM, IND_ELEB
69 INTEGER :: IPOBO(npoin)
78 501
FORMAT(1x,
'STOSEG31 (BIEF) : UNEXPECTED ELEMENT: ',1i6)
87 eltsegbor(ieleb,iseg) = 0
88 orisegbor(ieleb,iseg) = 0
97 ALLOCATE(ind_elem(npoin,mxelvs+1))
98 ALLOCATE(ind_eleb(npoin,mxelvs+1))
119 ind_elem(ikl,1)=ind_elem(ikl,1)+1
120 ind_elem(ikl,ind_elem(ikl,1)+1)=ielem
126 ikl = nbor(iklbor(ieleb,i))
127 ind_eleb(ikl,1)=ind_eleb(ikl,1)+1
128 ind_eleb(ikl,ind_eleb(ikl,1)+1)=ieleb
134 i1=nbor(iklbor(ieleb,
isegt(iseg,1)))
135 i2=nbor(iklbor(ieleb,
isegt(iseg,2)))
137 DO i = 2, ind_eleb(i1,1)+1
138 ivoisb = ind_eleb(i1,i)
139 DO j = 2, ind_eleb(i2,1)+1
140 IF (ivoisb.NE.ind_eleb(i2,j))
THEN 147 IF (.NOT. found)
THEN 176 IF(eltsegbor(ieleb,iseg).EQ.0)
THEN 178 i1=nbor(iklbor(ieleb,
isegt(iseg,1)))
179 i2=nbor(iklbor(ieleb,
isegt(iseg,2)))
182 WRITE(
lu,*)
'STOSEG31 : BORDER EDGE MADE OF ONLY ONE POINT' 183 WRITE(
lu,*)
' ELEMENT ',ieleb,
' SEGMENT ',iseg
190 eltsegbor(ieleb,iseg) = nsebor
204 glosegbor(nsebor,1) = i1
205 glosegbor(nsebor,2) = i2
206 orisegbor(ieleb,iseg) = 1
208 glosegbor(nsebor,1) = i2
209 glosegbor(nsebor,2) = i1
210 orisegbor(ieleb,iseg) = 2
216 DO i = 2, ind_eleb(i1,1)+1
217 ivoisb = ind_eleb(i1,i)
219 IF (ivoisb.LE.ieleb) cycle
221 DO j = 2, ind_eleb(i2,1)+1
222 IF (ivoisb.EQ.ind_eleb(i2,j))
THEN 227 j1=nbor(iklbor(ivoisb,
isegt(jseg,1)))
228 j2=nbor(iklbor(ivoisb,
isegt(jseg,2)))
231 IF ( (i1.EQ.j1.AND.i2.EQ.j2) .OR.
232 & (i1.EQ.j2.AND.i2.EQ.j1))
THEN 234 IF(eltsegbor(ivoisb,jseg).EQ.0)
THEN 235 eltsegbor(ivoisb,jseg) = nsebor
248 orisegbor(ivoisb,jseg) = 1
250 orisegbor(ivoisb,jseg) = 2
259 IF (.NOT. found)
THEN 260 WRITE(
lu,*)
'STOSEG31 : WRONG MESH' 261 WRITE(
lu,*)
' ELEMENTS ',ieleb,
' AND ',ivoisb
262 WRITE(
lu,*)
' LINKED BY POINTS ',i1,
' AND ',i2
263 WRITE(
lu,*)
' BUT THESE POINTS ARE NOT AN EDGE' 264 WRITE(
lu,*)
' OF ELEMENT ',ivoisb
292 j1=nbor(iklbor(ieleb,
isegt(iseg,1)))
293 j2=nbor(iklbor(ieleb,
isegt(iseg,2)))
295 jseg=eltsegbor(ieleb,iseg)
298 IF(orisegbor(ieleb,iseg).EQ.1)
THEN 299 IF(j1.NE.i1.OR.j2.NE.i2)
THEN 301 WRITE(
lu,*)
'ERROR IN STOSEG31' 302 WRITE(
lu,*)
'ELEMENT ',ieleb,
' SEGMENT ',iseg
303 WRITE(
lu,*)
'POINTS ',j1,j2
304 WRITE(
lu,*)
'GLOBAL SEGMENT ',jseg
305 WRITE(
lu,*)
'POINTS ',i1,i2
309 ELSE IF(orisegbor(ieleb,iseg).EQ.2)
THEN 310 IF(j1.NE.i2.OR.j2.NE.i1)
THEN 312 WRITE(
lu,*)
'ERROR IN STOSEG31' 313 WRITE(
lu,*)
'ELEMENT ',ieleb,
' SEGMENT ',iseg
314 WRITE(
lu,*)
'POINTS ',j1,j2
315 WRITE(
lu,*)
'GLOBAL SEGMENT ',jseg
316 WRITE(
lu,*)
'POINTS ',i1,i2
330 eltseg(ielem,iseg) = 0
331 oriseg(ielem,iseg) = 0
350 IF(eltseg(ielem,iseg).EQ.0)
THEN 352 i1=ikle(ielem,
isegt(iseg,1))
353 i2=ikle(ielem,
isegt(iseg,2))
356 WRITE(
lu,*)
'STOSEG31 : EDGE MADE OF ONLY ONE POINT' 357 WRITE(
lu,*)
' ELEMENT ',ielem,
' SEGMENT ',iseg
363 IF (ipobo(i1).NE.0 .AND. ipobo(i2).NE.0)
THEN 366 DO i = 2, ind_eleb(i1,1)+1
367 ieleb = ind_eleb(i1,i)
368 DO j = 2, ind_eleb(i2,1)+1
369 IF (ieleb.NE.ind_eleb(i2,j)) cycle
371 j1=nbor(iklbor(ieleb,
isegt(jseg,1)))
372 j2=nbor(iklbor(ieleb,
isegt(jseg,2)))
373 IF ( (i1.EQ.j1.AND.i2.EQ.j2) .OR.
374 & (i1.EQ.j2.AND.i2.EQ.j1) )
THEN 375 xseg = eltsegbor(ieleb,jseg)
377 nsebor2 = nsebor2 + 1
385 IF (.NOT. found)
THEN 395 eltseg(ielem,iseg) = xseg
410 oriseg(ielem,iseg) = 1
414 oriseg(ielem,iseg) = 2
419 DO i = 2, ind_elem(i1,1)+1
420 ivois = ind_elem(i1,i)
422 IF (ivois.LE.ielem) cycle
424 DO j = 2, ind_elem(i2,1)+1
425 IF (ivois.EQ.ind_elem(i2,j))
THEN 431 j1=ikle(ivois,
isegt(jseg,1))
432 j2=ikle(ivois,
isegt(jseg,2))
435 IF ( (i1.EQ.j1.AND.i2.EQ.j2) .OR.
436 & (i1.EQ.j2.AND.i2.EQ.j1))
THEN 438 eltseg(ivois,jseg) = xseg
450 oriseg(ivois,jseg) = 1
452 oriseg(ivois,jseg) = 2
463 IF (.NOT. found)
THEN 464 WRITE(
lu,*)
'STOSEG31 : WRONG MESH' 465 WRITE(
lu,*)
' ELEMENTS ',ielem,
' AND ',ivois
466 WRITE(
lu,*)
' LINKED BY POINTS ',i1,
' AND ',i2
467 WRITE(
lu,*)
' BUT THESE POINTS ARE NOT AN EDGE' 468 WRITE(
lu,*)
' OF ELEMENT ',ivois
479 DEALLOCATE (ind_elem)
489 WRITE(
lu,503) nse,nseg
490 503
FORMAT(1x,
'STOSEG31 (BIEF): WRONG NUMBER OF SEGMENTS : ',1i12,
491 &
' INSTEAD OF ',1i12,
' ESTIMATED')
498 IF(nsegbor.LT.nsebor)
THEN 499 WRITE(
lu,505) nsebor,nsegbor
500 505
FORMAT(1x,
'STOSEG31 (BIEF): WRONG NUMBER OF BORDER SEGMENTS : ',
501 & 1i12,
' INSTEAD OF ',1i12,
' ESTIMATED')
529 j1=ikle(ielem,
isegt(iseg,1))
530 j2=ikle(ielem,
isegt(iseg,2))
532 jseg=eltseg(ielem,iseg)
535 IF (jseg.LE.nsebor)
THEN 536 ig1=glosegbor(jseg,1)
537 ig2=glosegbor(jseg,2)
542 IF(oriseg(ielem,iseg).EQ.1)
THEN 543 IF(j1.NE.i1.OR.j2.NE.i2)
THEN 545 WRITE(
lu,*)
'ERROR IN STOSEG31' 546 WRITE(
lu,*)
'ELEMENT ',ielem,
' SEGMENT ',iseg
547 WRITE(
lu,*)
'POINTS ',j1,j2
548 WRITE(
lu,*)
'GLOBAL SEGMENT ',jseg
549 WRITE(
lu,*)
'POINTS ',i1,i2
550 WRITE(
lu,*)
'BORDER POINTS ',ig1,ig2
551 WRITE(
lu,*)
'BORDER POINTS2 ',ipobo(i1),ipobo(i2)
556 IF(j1.NE.i2.OR.j2.NE.i1)
THEN 558 WRITE(
lu,*)
'ERROR IN STOSEG31' 559 WRITE(
lu,*)
'ELEMENT ',ielem,
' SEGMENT ',iseg
560 WRITE(
lu,*)
'POINTS ',j1,j2
561 WRITE(
lu,*)
'GLOBAL SEGMENT ',jseg
562 WRITE(
lu,*)
'POINTS ',i1,i2
563 WRITE(
lu,*)
'POINTS BORD ',ig1,ig2
564 WRITE(
lu,*)
'POINTS BORD2 ',ipobo(i1),ipobo(i2)
integer, dimension(6, 2) isegt
subroutine stoseg31(NPOIN, NELEM, NELEB, NELMAX, IELM, MXELVS, IKLE, IKLBOR, NBOR, NPTFR, GLOSEG, MAXSEG, GLOSEGBOR, MAXSEGBOR, NSEG, NSEGBOR, ELTSEG, ELTSEGBOR, ORISEG, ORISEGBOR, KNOLG, NDS)