The TELEMAC-MASCARET system  trunk
mxptel31.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE mxptel31
3 ! *******************
4 !
5  & (nelem,npoin,mxelvs,ikles,mxptvs)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief FOR TETRAHEDRA, GIVES THE MAXIMUM NUMBER OF NEIGHBOURS
12 !+ FOR A GIVEN MESH NODE.
13 !
14 !history LAM MINH-PHUONG; F. DECUNG
15 !+ 31/08/2009
16 !+ V5P5
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
32 !| IKLES |-->| LIKE CONNECTIVITY TABLE BUT IN SELAFIN FORMAT
33 !| | | IKLES(4,NELEM) INSTEAD OF IKLE(NELEM,4)
34 !| MXELVS |-->| MAXIMUM NUMBER OF NEIGHBOURING ELEMENTS
35 !| MXPTVS |<--| MAXIMUM NUMBER OF NEIGHBOURS OF A POINT
36 !| NELEM |-->| NUMBER OF ELEMENTS
37 !| NPOIN |-->| NUMBER OF POINTS
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !
40  USE bief, ex_mxptel31 => mxptel31
41 !
43  IMPLICIT NONE
44 !
45 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 !
47  INTEGER, INTENT(IN) :: NELEM
48  INTEGER, INTENT(IN) :: NPOIN
49  INTEGER, INTENT(IN) :: MXELVS
50  INTEGER, INTENT(IN), DIMENSION(4,NELEM) :: IKLES
51  INTEGER, INTENT(OUT) :: MXPTVS
52 !
53 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 !
55  INTEGER :: IPOIN,I,J,K,IKLJ,IKL
56  INTEGER :: NVOIS
57  INTEGER,DIMENSION(:),ALLOCATABLE :: VOIS
58  INTEGER,DIMENSION(:,:),ALLOCATABLE :: IND_ELEM
59 !
60  ALLOCATE(vois(3*mxelvs))
61  ALLOCATE(ind_elem(npoin,mxelvs+1))
62 !
63 !-----------------------------------------------------------------------
64 !
65 ! IND_ELEM GIVES THE NUMBER OF ELEMENTS AROUND A NODE AND THEIR NUMBERS
66 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68  DO i = 1, npoin
69  ind_elem(i,1) = 0
70  ENDDO
71 !
72  DO j=1, 4
73  DO i=1,nelem
74  ikl = ikles(j,i)
75  ind_elem(ikl,1)=ind_elem(ikl,1)+1
76  ind_elem(ikl,ind_elem(ikl,1)+1)=i
77  ENDDO
78  ENDDO
79 !
80 !-----------------------------------------------------------------------
81 !-----------------------------------------------------------------------
82 !
83  mxptvs = 0
84 !
85 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
86 ! LOOP ON ALL THE NODES OF THE MESH !
87 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
88 !
89  DO ipoin = 1, npoin
90 !
91  nvois = 1
92  vois(1) = ipoin
93 !
94 ! INITIALISES VOIS TO 0
95 !
96  DO i = 1, 3*mxelvs
97  vois(i) = 0
98  ENDDO
99 !
100 ! FILLS IN VOIS, WHICH CONTAINS THE NUMBERS OF ALL THE NODES
101 ! NEIGHBOURING IPOIN
102 !
103  DO j = 1,4
104  DO i = 2, ind_elem(ipoin,1)+1
105  iklj = ikles(j,ind_elem(ipoin,i))
106  DO k = 1, nvois
107  IF ( vois(k) == iklj ) EXIT
108  ENDDO
109  IF( k > nvois ) THEN
110  nvois = nvois + 1
111  vois(nvois) = iklj
112  ENDIF
113  ENDDO
114  ENDDO
115 !
116  nvois = nvois - 1
117  IF( mxptvs < nvois) mxptvs = nvois
118 !
119  ENDDO
120 !
121 !-----------------------------------------------------------------------
122 !
123  DEALLOCATE (vois)
124  DEALLOCATE (ind_elem)
125 !
126 !-----------------------------------------------------------------------
127 !
128  RETURN
129  END
subroutine mxptel31(NELEM, NPOIN, MXELVS, IKLES, MXPTVS)
Definition: mxptel31.f:7
Definition: bief.f:3