The TELEMAC-MASCARET system  trunk
mxptel.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mxptel
3 ! *****************
4 !
5  &(mxptvs,mxelvs,ikles,ielm,npoin,nelem,ndp,ipobo,listin)
6 !
7 !***********************************************************************
8 ! BIEF V7P0 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPUTES THE MAXIMUM NUMBER OF POINTS AND ELEMENTS
12 !+ NEIGHBOURING A POINT FOR A GIVEN TRIANGULAR MESH.
13 !
14 !note ALLOCATES ITRAV HERE, INTERNALLY.
15 !+ IT'S A LOCAL WORKING VARIABLE ANYWAY.
16 !+ COULD ALSO PASS THE ELEMENT TYPE IN ARGUMENT TO TREAT
17 !+ THE 3D SPECIFICALLY.
18 !
19 !history J-M HERVOUET (LNH)
20 !+ 24/08/95
21 !+ V5P1
22 !+
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 13/07/2010
26 !+ V6P0
27 !+ Translation of French comments within the FORTRAN sources into
28 !+ English comments
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 21/08/2010
32 !+ V6P0
33 !+ Creation of DOXYGEN tags for automated documentation and
34 !+ cross-referencing of the FORTRAN sources
35 !
36 !history J-M HERVOUET (EDF LAB, LNHE)
37 !+ 18/04/2014
38 !+ V7P0
39 !+ Automatic array ITRAV now allocatable.
40 !
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !| IELM |-->| TYPE OF ELEMENT
43 !| IKLES |-->| LIKE CONNECTIVITY TABLE BUT IN SELAFIN FORMAT
44 !| | | IKLES(3,NELEM) INSTEAD OF IKLE(NELEM,3)
45 !| IPOBO |-->| 0 FOR INNER POINTS
46 !| | | NOT 0 FOR BOUNDARY POINTS (THEIR RANK ACTUALLY)
47 !| LISTIN |-->| IF YES : MXELVS AND MXPTVS WILL BE PRINTED
48 !| MXELVS |-->| MAXIMUM NUMBER OF NEIGHBOURING ELEMENTS
49 !| MXPTVS |-->| MAXIMUM NUMBER OF NEIGHBOURS OF A POINT
50 !| NDP |-->| NUMBER OF POINTS PER ELEMENT
51 !| NELEM |-->| NUMBER OF ELEMENTS
52 !| NPOIN |-->| NUMBER OF POINTS
53 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54 !
55  USE bief, ex_mxptel => mxptel
57 !
59  IMPLICIT NONE
60 !
61 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 !
63  INTEGER, INTENT(INOUT) :: MXPTVS,MXELVS
64  INTEGER, INTENT(IN) :: IELM,NDP,NPOIN,NELEM
65  INTEGER, INTENT(IN) :: IKLES(ndp,nelem),IPOBO(npoin)
66  LOGICAL, INTENT(IN) :: LISTIN
67 !
68 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
69 !
70  INTEGER I,J,IELEM
71  INTEGER, ALLOCATABLE :: ITRAV(:)
72  ALLOCATE(itrav(npoin))
73 !
74 !-----------------------------------------------------------------------
75 !
76 ! 1) INITIALISES THE NUMBER OF NEIGHBOURING ELEMENTS TO 0:
77 !
78  DO i = 1 , npoin
79  itrav(i) = 0
80  ENDDO
81 !
82 ! 2) COUNTS THE NUMBER OF NEIGHBOURING ELEMENTS PER ASSEMBLY OPERATION:
83 !
84  DO j = 1, ndp
85  DO ielem = 1 , nelem
86  itrav(ikles(j,ielem)) = itrav(ikles(j,ielem)) + 1
87  ENDDO
88  ENDDO
89 !
90 ! 3) LOOKS FOR THE MAXIMUM :
91 !
92  mxelvs = itrav(1)
93  DO i = 2 , npoin
94  mxelvs = max(mxelvs,itrav(i))
95  ENDDO
96 !
97 ! 4) NUMBER OF NEIGHBOURING POINTS: NEED TO ADD 1 TO THIS NUMBER
98 ! FOR BOUNDARY NODES.
99 ! SIMULTANEOUSLY LOOKS FOR THE MAXIMUM
100 !
101  IF(ielm.EQ.31) THEN
102  CALL mxptel31(nelem,npoin,mxelvs,ikles,mxptvs)
103  ELSE
104  mxptvs = mxelvs
105  DO i = 1 , npoin
106  IF(ipobo(i).NE.0) mxptvs = max(mxptvs,itrav(i)+1)
107  ENDDO
108  ENDIF
109 !
110 !-----------------------------------------------------------------------
111 !
112  IF(ncsize.GT.1) THEN
113  mxptvs=p_max(mxptvs)
114  mxelvs=p_max(mxelvs)
115  ENDIF
116 !
117 !-----------------------------------------------------------------------
118 !
119  IF(listin) THEN
120  WRITE(lu,98) mxelvs,mxptvs
121  IF(ncsize.GT.1) THEN
122  WRITE(lu,*) '(GLOBAL MESH)'
123  ENDIF
124  ENDIF
125 98 FORMAT(1x,'MXPTEL (BIEF) : MAXIMUM NUMBER OF ELEMENTS AROUND A POI
126  &NT: ',1i3,/,1x,
127  & ' MAXIMUM NUMBER OF POINTS AROUND A POINT
128  &: ',1i3)
129 !
130 !-----------------------------------------------------------------------
131 !
132  DEALLOCATE(itrav)
133 !
134 !-----------------------------------------------------------------------
135 !
136  RETURN
137  END
subroutine mxptel(MXPTVS, MXELVS, IKLES, IELM, NPOIN, NELEM, NDP, IPOBO, LISTIN)
Definition: mxptel.f:7
subroutine mxptel31(NELEM, NPOIN, MXELVS, IKLES, MXPTVS)
Definition: mxptel31.f:7
Definition: bief.f:3