The TELEMAC-MASCARET system  trunk
comp_nh_com_seg.f
Go to the documentation of this file.
1 ! **************************
2  SUBROUTINE comp_nh_com_seg
3 ! **************************
4 !
5  &(eltseg,dim1eltseg,nh_com_seg,dim1nhcom,nb_neighb_seg,
6  & nb_neighb_pt_seg,gloseg,dimglo,knolg,npoin)
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief COMPLETES THE REAL ADDRESS OF SEGMENTS IN NH_COM_SEG.
13 !+ SEE PARINI WHERE NH_COM_SEG IS INITIALISED AT -999999
14 !+ AND THEN FILLED WITH 4*IELEM+IFACE TO STORE IELEM AND
15 !+ IFACE.
16 !+
17 !+ THEN THE ADDRESSES ARE ORDERED WITH RESPECT TO THE
18 !+ GLOBAL NUMBER OF THE FIRST AND SECOND POINT OF
19 !+ EVERY SEGMENT, SO THAT THE PROCESSORS SHARE THE
20 !+ INFORMATION ON THE SAME SEGMENTS.
21 !
22 !history C. DENIS
23 !+ 22/07/2009
24 !+ V6P0
25 !+ AVOIDS THE (TOO) LARGE INTEGERS OF 5.9 RELEASE
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 13/07/2010
29 !+ V6P0
30 !+ Translation of French comments within the FORTRAN sources into
31 !+ English comments
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 21/08/2010
35 !+ V6P0
36 !+ Creation of DOXYGEN tags for automated documentation and
37 !+ cross-referencing of the FORTRAN sources
38 !
39 !history J-M HERVOUET
40 !+ 09/09/2017
41 !+ V7P3
42 !+ Local NELEM renamed DIM1ELTSEG, it is not always equal to NELEM,
43 !+ it is in fact NELMAX.
44 !
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !| DIM1ELTSEG |-->| FIRST DIMENSION OF ELTSEG
47 !| DIM1NHCOM |-->| FIRST DIMENSION OF NH_COM_SEG
48 !| DIMGLO |-->| FIRST DIMENSION OF GLOSEG
49 !| ELTSEG |-->| GIVES THE SEGMENT NUMBER OF EDGES OF ELEMENTS
50 !| GLOSEG |-->| GLOBAL NUMBERS (IN SUB-DOMAIN) OF POINTS
51 !| | | OF A SEGMENT
52 !| KNOLG |-->| GLOBAL NUMBERS (WHOLE MESH) FUNCTION OF
53 !| | | LOCAL NUMBERS OF POINTS
54 !| NB_NEIGHB_SEG |-->| NUMBER OF NEIGHBOUR PROCESSOR (FOR SEGMENTS)
55 !| NH_COM_SEG |-->| ADDRESSES OF INTERFACE SEGMENTS
56 !| NPOIN |-->| NUMBER OF POINTS
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !
60  IMPLICIT NONE
61 !
62 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 !
64  INTEGER, INTENT(IN) :: DIM1ELTSEG,DIM1NHCOM,NB_NEIGHB_SEG
65  INTEGER, INTENT(IN) :: DIMGLO,NPOIN
66  INTEGER, INTENT(INOUT) :: NH_COM_SEG(dim1nhcom,nb_neighb_seg)
67  INTEGER, INTENT(IN) :: ELTSEG(dim1eltseg,3),GLOSEG(dimglo,2)
68  INTEGER, INTENT(IN) :: NB_NEIGHB_PT_SEG(nb_neighb_seg)
69  INTEGER, INTENT(IN) :: KNOLG(npoin)
70 !
71 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72 !
73  INTEGER IELEM,IFACE,ISEG,IPROC,IKA,I,J,B,NUMSEG
74  INTEGER I11,I12,I21,I22
75  LOGICAL IS_LE_THAN
76 !
77 !-----------------------------------------------------------------------
78 !
79  DO iproc=1,nb_neighb_seg
80  ika = nb_neighb_pt_seg(iproc)
81  DO iseg=1,ika
82  iface=mod(nh_com_seg(iseg,iproc),4)
83  ielem=(nh_com_seg(iseg,iproc)-iface)/4
84  numseg=eltseg(ielem,iface)
85  nh_com_seg(iseg,iproc)=numseg
86  ENDDO
87  IF(ika.GT.1) THEN
88  DO j=2,ika
89  b=nh_com_seg(j,iproc)
90  DO i=j-1,1,-1
91  numseg=nh_com_seg(i,iproc)
92  i11=knolg(gloseg(numseg,1))
93  i12=knolg(gloseg(numseg,2))
94  i21=knolg(gloseg(b ,1))
95  i22=knolg(gloseg(b ,2))
96  IF(i11.GT.i21) THEN
97  is_le_than=.false.
98  ELSEIF(i11.LT.i21) THEN
99  is_le_than=.true.
100  ELSEIF(i11.EQ.i21.AND.i12.GT.i22) THEN
101  is_le_than=.false.
102  ELSEIF(i11.EQ.i21.AND.i12.LT.i22) THEN
103  is_le_than=.true.
104  ELSEIF(i11.EQ.i21.AND.i12.EQ.i22) THEN
105  is_le_than=.true.
106  ELSE
107  WRITE(lu,*) 'UNEXPECTED CASE IN COMP_NH_COM_SEG'
108  CALL plante(1)
109  stop
110  ENDIF
111  IF(is_le_than) GO TO 10
112  nh_com_seg(i+1,iproc)=nh_com_seg(i,iproc)
113  ENDDO
114  10 CONTINUE
115  nh_com_seg(i+1,iproc)=b
116  ENDDO
117  ENDIF
118  ENDDO
119 !
120 !-----------------------------------------------------------------------
121 !
122  RETURN
123  END
124 
subroutine comp_nh_com_seg(ELTSEG, DIM1ELTSEG, NH_COM_SEG, DIM1NHCOM, NB_NEIGHB_SEG, NB_NEIGHB_PT_SEG, GLOSEG, DIMGLO, KNOLG, NPOIN)