The TELEMAC-MASCARET system  trunk
stoseg31.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE stoseg31
3 ! *******************
4 !
5  &(npoin,nelem,neleb,nelmax,ielm,mxelvs,ikle,iklbor,
6  & nbor,nptfr,
7  & gloseg,maxseg,glosegbor,maxsegbor,nseg,nsegbor,
8  & eltseg,eltsegbor,oriseg,orisegbor,
9  & knolg,nds)
10 !
11 !***********************************************************************
12 ! BIEF V6P3 01/01/2013
13 !***********************************************************************
14 !
15 !brief BUILDS THE DATA STRUCTURE FOR EDGE-BASED STORAGE.
16 !
17 !history F. DECUNG (LNHE)
18 !+ 01/01/13
19 !+ V6P2
20 !+
21 !
22 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 !| ELTSEG |<--| SEGMENTS OF EVERY TRIANGLE
24 !| GLOSEG |<--| GLOBAL NUMBERS OF POINTS OF SEGMENTS
25 !| IELM |-->| 31: TETRAHEDRON
26 !| MXELVS |-->| MAXIMUM NUMBER OF NEIGHBOURING ELEMENTS
27 !| IKLE |-->| CONNECTIVITY TABLE
28 !| NBOR |-->| GLOBAL NUMBERS OF BOUNDARY POINTS
29 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
30 !| KNOLG |-->| GLOBAL NUMBER OF A LOCAL POINT IN PARALLEL
31 !| MAXSEG |<--| MAXIMUM NUMBER OF SEGMENTS (INTERNALS + EXTERNALS)
32 !| MAXSEGBOR |<--| MAXIMUM NUMBER OF SEGMENTS (EXTERNALS)
33 !| NPOIN |-->| NUMBER OF POINTS
34 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
35 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS IN 3D
36 !| NSEG |<--| NUMBER OF SEGMENTS OF THE MESH
37 !| NSEGBOR |<--| NUMBER OF BORDER SEGMENTS OF THE MESH
38 !| ORISEG |<--| ORIENTATION OF SEGMENTS OF EVERY TRIANGLE
39 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 !
41  USE bief, ex_stoseg31 => stoseg31
42  USE declarations_telemac, ONLY : isegt
43 !
45  IMPLICIT NONE
46 !
47 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 !
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)
60 !
61 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 !
63  INTEGER NSE,NSEBOR,NSEBOR2,XSEG,COUNT
64  INTEGER ISEG,JSEG
65  INTEGER I,J,IKL,I1,I2,J1,J2,IG1,IG2,IK1,IK2
66  INTEGER IELEM,IVOIS,IELEB,IVOISB
67 !
68  INTEGER,DIMENSION(:,:),ALLOCATABLE ::IND_ELEM, IND_ELEB
69  INTEGER :: IPOBO(npoin)
70 !
71  LOGICAL FOUND, ERR
72 !
73 !
74 !-----------------------------------------------------------------------
75 !
76  IF(ielm.NE.31) THEN
77  WRITE(lu,501) ielm
78 501 FORMAT(1x,'STOSEG31 (BIEF) : UNEXPECTED ELEMENT: ',1i6)
79  CALL plante(1)
80  stop
81  ENDIF
82 !
83 ! INITIALISES ELTSEG, ORISEG, GLOSEG
84 !
85  DO ieleb = 1, neleb
86  DO iseg = 1, 3 ! BIEF_NBSEGEL(IELM2, MESH) ie. IELM2 = 81
87  eltsegbor(ieleb,iseg) = 0
88  orisegbor(ieleb,iseg) = 0
89  ENDDO
90  ENDDO
91 !
92  DO iseg = 1, nsegbor
93  glosegbor(iseg,1) = 0
94  glosegbor(iseg,2) = 0
95  ENDDO
96 !
97  ALLOCATE(ind_elem(npoin,mxelvs+1))
98  ALLOCATE(ind_eleb(npoin,mxelvs+1))
99 !
100 !-----------------------------------------------------------------------
101 !
102 ! IND_ELEM GIVES THE NUMBER OF ELEMENTS AROUND A NODE AND THEIR NUMBERS
103 ! ALGO FROM MXPTEL31.f
104 ! IDEM IND_ELEB FOR BORDER NODE
105 !
106  DO i = 1, npoin
107  ind_elem(i,1) = 0
108  ENDDO
109  DO i = 1, npoin
110  ind_eleb(i,1) = 0
111  DO j = 2, mxelvs+1
112  ind_eleb(i,j) = -99
113  ENDDO
114  ENDDO
115 !
116  DO i = 1, 4
117  DO ielem = 1, nelem
118  ikl = ikle(ielem,i)
119  ind_elem(ikl,1)=ind_elem(ikl,1)+1
120  ind_elem(ikl,ind_elem(ikl,1)+1)=ielem
121  ENDDO
122  ENDDO
123 !
124  DO i = 1, 3
125  DO ieleb = 1, neleb
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
129  ENDDO
130  ENDDO
131 !
132  DO ieleb = 1 , neleb
133  DO iseg = 1 , 3
134  i1=nbor(iklbor(ieleb,isegt(iseg,1)))
135  i2=nbor(iklbor(ieleb,isegt(iseg,2)))
136  found = .false.
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
141  cycle
142  ELSE
143  found = .true.
144  ENDIF
145  ENDDO
146  ENDDO
147  IF (.NOT. found) THEN
148  CALL plante(1)
149  stop
150  ENDIF
151  ENDDO
152  ENDDO
153 !
154 !-----------------------------------------------------------------------
155 !
156 ! BUILDS IPOBO TO GO FROM GLOBAL NUMBERING TO LOCAL NUMBERING
157 !
158  DO i=1,npoin
159  ipobo(i) = 0
160  ENDDO
161  DO i = 1, nptfr
162  ipobo(nbor(i)) = i
163  ENDDO
164 !
165 !-----------------------------------------------------------------------
166 !
167 ! LOOP ON ELEMENTS FOR NUMBERING INTERNAL SEGMENTS AND FILLING:
168 ! GLOSEGBOR, ELTSEGBOR, ORISEGBOR
169 !
170  nsebor = 0
171  count = 0
172  DO ieleb = 1, neleb
173  !
174  DO iseg = 1, 3 ! BIEF_NBSEGEL(IELM2,
175  !
176  IF(eltsegbor(ieleb,iseg).EQ.0) THEN
177 ! BOTH NEIGHBOURING ELEBENTS ARE TREATED FOR THIS SEGMENT
178  i1=nbor(iklbor(ieleb,isegt(iseg,1)))
179  i2=nbor(iklbor(ieleb,isegt(iseg,2)))
180 !
181  IF(i1.EQ.i2) THEN
182  WRITE(lu,*) 'STOSEG31 : BORDER EDGE MADE OF ONLY ONE POINT'
183  WRITE(lu,*) ' ELEMENT ',ieleb,' SEGMENT ',iseg
184  CALL plante(1)
185  stop
186  ENDIF
187 !
188 ! INTERNAL SEGMENT
189  nsebor = nsebor + 1
190  eltsegbor(ieleb,iseg) = nsebor
191 !
192 ! STORE LOCAL SEGMENT NUMBER (LOCAL BORDER NODE) BUT SORT ACCORDING TO GLOBAL NUMBER
193  IF(ncsize.GT.1) THEN
194  ig1=knolg(i1)
195  ig2=knolg(i2)
196  ELSE
197  ig1=i1
198  ig2=i2
199  ENDIF
200 !
201 ! SEGMENT ORIENTED LOWER RANK TO HIGHER RANK
202 ! SORTING EVEN FOR BORDER SEGMENT (SLIGHT DIFFERENCE WITH STOSEG.f)
203  IF(ig1.LT.ig2) THEN
204  glosegbor(nsebor,1) = i1
205  glosegbor(nsebor,2) = i2
206  orisegbor(ieleb,iseg) = 1
207  ELSE
208  glosegbor(nsebor,1) = i2
209  glosegbor(nsebor,2) = i1
210  orisegbor(ieleb,iseg) = 2
211  ENDIF
212 !
213 ! LOOKING FOR THE NEIGHBOUR ELEMENTS WHERE BOTH I1 & I2 BELONG TO
214 ! FIRST STEP : I1 BELONGS TO IVOIS
215  found = .false.
216  DO i = 2, ind_eleb(i1,1)+1
217  ivoisb = ind_eleb(i1,i)
218 ! IVOIS <= IELEB IS ALREADY SET
219  IF (ivoisb.LE.ieleb) cycle
220 ! SECOND STEP : I1 BELONGS TO IVOISB
221  DO j = 2, ind_eleb(i2,1)+1
222  IF (ivoisb.EQ.ind_eleb(i2,j)) THEN
223 ! GOT IT : [I1;I2] BELONGS TO IVOISB
224 !
225  DO jseg= 1, 3 ! BIEF_NBSEGEL(IELM2, MESH)
226 ! LOOKS FOR THE RIGHT VERTICE OF ELEMENT IVOISB
227  j1=nbor(iklbor(ivoisb,isegt(jseg,1)))
228  j2=nbor(iklbor(ivoisb,isegt(jseg,2)))
229 ! IN STOSEG : ALL ELEMENTS HAVE A COUNTER-CLOCKWISE NUMBERING
230 ! HOWEVER, IT DOESN'T WORK HERE...
231  IF ( (i1.EQ.j1.AND.i2.EQ.j2) .OR.
232  & (i1.EQ.j2.AND.i2.EQ.j1)) THEN
233 !
234  IF(eltsegbor(ivoisb,jseg).EQ.0) THEN
235  eltsegbor(ivoisb,jseg) = nsebor
236  ENDIF
237 !
238  IF(ncsize.GT.1) THEN
239  ik1=knolg(j1)
240  ik2=knolg(j2)
241  ELSE
242  ik1=j1
243  ik2=j2
244  ENDIF
245 !
246 ! SEGMENT ORIENTED LOWER RANK TO HIGHER RANK
247  IF(ik1.LT.ik2) THEN
248  orisegbor(ivoisb,jseg) = 1
249  ELSE
250  orisegbor(ivoisb,jseg) = 2
251  ENDIF
252  found = .true.
253  ENDIF ! IF I1.EQ.J1...
254  ENDDO ! JSEG = 1, 6
255 !
256 !-----------------------------------------------------------------------
257 !
258 ! VERTICE NOT FOUND, THIS IS AN ERROR
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
265  CALL plante(1)
266  stop
267  ENDIF ! IF .NOT. FOUND
268  ENDIF ! IF FOUND THE GOOD NEIGHBOUR (IVOISB.EQ.IELEB...)
269  ENDDO !
270  ENDDO
271  !IF ( (.NOT. FOUND).AND.(NCSIZE.LE.1) ) THEN
272 ! PATHOLOGIC CASE (AT THIS TIME BEING AT LEAST)
273 ! FOUND A BORDER VERTICE WHICH IS NOT CONNECTED TO ANY OTHER ONE
274  ! CALL PLANTE()
275  ! STOP
276  !ELSE
277  count = count + 1
278  !ENDIF
279  ENDIF
280  ENDDO
281  ENDDO
282 !
283 !-----------------------------------------------------------------------
284 !
285 ! CHECKING (ACCORDING GLOSEG51.f)
286 !
287 ! LOOP ON TETRAHEDRA
288  DO ieleb = 1, neleb
289 ! LOOP ON LOCAL SEGMENTS
290  DO iseg = 1, 3
291 ! GLOBAL POINTS SEEN BY TRIANGLES
292  j1=nbor(iklbor(ieleb,isegt(iseg,1)))
293  j2=nbor(iklbor(ieleb,isegt(iseg,2)))
294 ! GLOBAL POINTS SEEN BY GLOSEG
295  jseg=eltsegbor(ieleb,iseg)
296  i1=glosegbor(jseg,1)
297  i2=glosegbor(jseg,2)
298  IF(orisegbor(ieleb,iseg).EQ.1) THEN
299  IF(j1.NE.i1.OR.j2.NE.i2) THEN
300  WRITE(lu,*) ' '
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
306  CALL plante(1)
307  stop
308  ENDIF
309  ELSE IF(orisegbor(ieleb,iseg).EQ.2) THEN
310  IF(j1.NE.i2.OR.j2.NE.i1) THEN
311  WRITE(lu,*) ' '
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
317  CALL plante(1)
318  stop
319  ENDIF
320  ENDIF
321  ENDDO
322  ENDDO
323 !
324 !-----------------------------------------------------------------------
325 !
326 ! INITIALISES ELTSEG, ORISEG, GLOSEG
327 !
328  DO ielem = 1, nelem
329  DO iseg = 1, 6 ! BIEF_NBSEGEL(IELM1, MESH) ie. IELM1 = 31
330  eltseg(ielem,iseg) = 0
331  oriseg(ielem,iseg) = 0
332  ENDDO
333  ENDDO
334 !
335  DO iseg = 1, nseg
336  gloseg(iseg,1) = 0
337  gloseg(iseg,2) = 0
338  ENDDO
339 !
340 ! LOOP ON ELEMENTS FOR NUMBERING INTERNAL SEGMENTS AND FILLING:
341 ! GLOSEG, ELTSEG, ORISEG
342 !
343  nse = nsebor
344  nsebor2 = 0
345  DO ielem = 1, nelem
346  DO iseg = 1, 6 ! BIEF_NBSEGEL(IELM, MESH)
347  !
348  found = .false.
349  !
350  IF(eltseg(ielem,iseg).EQ.0) THEN
351 ! BOTH NEIGHBOURING ELEMENTS ARE TREATED FOR THIS SEGMENT
352  i1=ikle(ielem,isegt(iseg,1))
353  i2=ikle(ielem,isegt(iseg,2))
354 !
355  IF(i1.EQ.i2) THEN
356  WRITE(lu,*) 'STOSEG31 : EDGE MADE OF ONLY ONE POINT'
357  WRITE(lu,*) ' ELEMENT ',ielem,' SEGMENT ',iseg
358  CALL plante(1)
359  stop
360  ENDIF
361 !
362 ! THIS SEGMENT IS A BORDER SEGMENT ? PATHOLOGIC CASES ?
363  IF (ipobo(i1).NE.0 .AND. ipobo(i2).NE.0) THEN
364  found = .false.
365 ! FOR DOUBLE CHECKING COUNTING OF BORDER SEGMENT
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
370  DO jseg = 1, 3
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)
376  found = .true.
377  nsebor2 = nsebor2 + 1
378  found = .true.
379  ENDIF
380  IF (found) EXIT
381  ENDDO
382  ENDDO
383  IF (found) EXIT
384  ENDDO
385  IF (.NOT. found) THEN
386  nse = nse + 1
387  xseg = nse
388  ENDIF
389  ELSE
390  nse = nse + 1
391  xseg = nse
392  ENDIF
393 !
394 ! INTERNAL SEGMENT
395  eltseg(ielem,iseg) = xseg
396 !
397 ! STORE LOCAL SEGMENT NUMBER BUT SORT ACCORDING TO GLOBAL NUMBER
398  IF(ncsize.GT.1) THEN
399  ig1=knolg(i1)
400  ig2=knolg(i2)
401  ELSE
402  ig1=i1
403  ig2=i2
404  ENDIF
405 !
406 ! SEGMENT ORIENTED LOWER RANK TO HIGHER RANK
407  IF(ig1.LT.ig2) THEN
408  gloseg(xseg,1) = i1
409  gloseg(xseg,2) = i2
410  oriseg(ielem,iseg) = 1
411  ELSE
412  gloseg(xseg,1) = i2
413  gloseg(xseg,2) = i1
414  oriseg(ielem,iseg) = 2
415  ENDIF
416 !
417 ! LOOKING FOR THE NEIGHBOUR ELEMENTS WHERE BOTH I1 & I2 BELONG TO
418 ! FIRST STEP : I1 BELONGS TO IVOIS
419  DO i = 2, ind_elem(i1,1)+1
420  ivois = ind_elem(i1,i)
421 ! IVOIS <= IELEM IS ALREADY SET
422  IF (ivois.LE.ielem) cycle
423 ! SECOND STEP : I1 BELONGS TO IVOIS
424  DO j = 2, ind_elem(i2,1)+1
425  IF (ivois.EQ.ind_elem(i2,j)) THEN
426 ! GOT IT : [I1;I2] BELONGS TO IVOIS
427 !
428  found = .false.
429  DO jseg= 1, 6
430 ! LOOKS FOR THE RIGHT VERTICE OF ELEMENT IVOIS
431  j1=ikle(ivois,isegt(jseg,1))
432  j2=ikle(ivois,isegt(jseg,2))
433 ! IN STOSEG : ALL ELEMENTS HAVE A COUNTER-CLOCKWISE NUMBERING
434 ! HOWEVER, IT DOESN'T WORK HERE...
435  IF ( (i1.EQ.j1.AND.i2.EQ.j2) .OR.
436  & (i1.EQ.j2.AND.i2.EQ.j1)) THEN
437 !
438  eltseg(ivois,jseg) = xseg
439 !
440  IF(ncsize.GT.1) THEN
441  ig1=knolg(j1)
442  ig2=knolg(j2)
443  ELSE
444  ig1=j1
445  ig2=j2
446  ENDIF
447 !
448 ! SEGMENT ORIENTED LOWER RANK TO HIGHER RANK
449  IF(ig1.LT.ig2) THEN
450  oriseg(ivois,jseg) = 1
451  ELSE
452  oriseg(ivois,jseg) = 2
453  ENDIF
454 !
455  found = .true.
456  EXIT
457  ENDIF ! IF I1.EQ.J1...
458  ENDDO ! JSEG = 1, 6
459 !
460 !-----------------------------------------------------------------------
461 !
462 ! VERTICE NOT FOUND, THIS IS AN ERROR
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
469  CALL plante(1)
470  stop
471  ENDIF ! IF .NOT. FOUND
472  ENDIF ! IF FOUND THE GOOD NEIGHBOUR (IVOIS.EQ.IELEM...)
473  ENDDO !
474  ENDDO
475  ENDIF
476  ENDDO
477  ENDDO
478 !
479  DEALLOCATE (ind_elem)
480 !
481 !-----------------------------------------------------------------------
482 !
483 ! MEMROY CHECKS (NSEG & NSEGBOR HAVE BEEN OVER-ESTIMATED IN NDS)
484 !
485  err = .false.
486 !
487 ! IF(NSEG.NE.NSE) THEN
488  IF(nseg.LT.nse) THEN
489  WRITE(lu,503) nse,nseg
490 503 FORMAT(1x,'STOSEG31 (BIEF): WRONG NUMBER OF SEGMENTS : ',1i12,
491  & ' INSTEAD OF ',1i12,' ESTIMATED')
492 ! CALL PLANTE(1)
493 ! STOP
494  err = .true.
495  ENDIF
496 !
497 ! IF(NSEGBOR.NE.NSEBOR) THEN
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')
502 ! CALL PLANTE(1)
503 ! STOP
504  err = .true.
505  ENDIF
506 
507  IF (err) THEN
508  CALL plante(1)
509  stop
510  ENDIF
511 !
512 ! UPDATE MESH/BIEF STRUCTURE WITH PRECISE SEGMENTS NUMBERS
513 ! NSE CONTAINS BOTH INTERNAL AND BORDER SEGMENTS...
514  nseg = nse
515  nsegbor = nsebor
516 ! UPDATE NDS WHICH OVER-ESTIMATES NSEG ?
517  nds(31,2) = nse
518  nds(81,2) = nsebor
519 !
520 !-----------------------------------------------------------------------
521 !
522 ! CHECKING (ACCORDING GLOSEG51.f)
523 !
524 ! LOOP ON TETRAHEDRA
525  DO ielem = 1, nelem
526 ! LOOP ON LOCAL SEGMENTS
527  DO iseg = 1, 6
528 ! GLOBAL POINTS SEEN BY TETRAHEDRON
529  j1=ikle(ielem,isegt(iseg,1))
530  j2=ikle(ielem,isegt(iseg,2))
531 ! GLOBAL POINTS SEEN BY GLOSEG
532  jseg=eltseg(ielem,iseg)
533  i1=gloseg(jseg,1)
534  i2=gloseg(jseg,2)
535  IF (jseg.LE.nsebor) THEN
536  ig1=glosegbor(jseg,1)
537  ig2=glosegbor(jseg,2)
538  ELSE
539  ig1 = 0
540  ig2 = 0
541  ENDIF
542  IF(oriseg(ielem,iseg).EQ.1) THEN
543  IF(j1.NE.i1.OR.j2.NE.i2) THEN
544  WRITE(lu,*) ' '
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)
552  CALL plante(1)
553  stop
554  ENDIF
555  ELSE
556  IF(j1.NE.i2.OR.j2.NE.i1) THEN
557  WRITE(lu,*) ' '
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)
565  CALL plante(1)
566  stop
567  ENDIF
568  ENDIF
569  ENDDO
570  ENDDO
571 !
572 !-----------------------------------------------------------------------
573 !
574  RETURN
575  END
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)
Definition: stoseg31.f:11
Definition: bief.f:3