The TELEMAC-MASCARET system  trunk
eleb3d.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE eleb3d
3 ! *****************
4 !
5  &(ikle3,nbor,nelbor,iklbor,neleb,nelebx,nulone,
6  & nelem2,npoin2,nplan,netage,nptfr)
7 !
8 !***********************************************************************
9 ! BIEF V7P0 19/03/2014
10 !***********************************************************************
11 !
12 !brief BUILDS THE 3D MESH.
13 !+
14 !+ INPUT: 3D MESH ARRAYS FILLED BY A PRELIMINARY CALL
15 !+ TO ELEBD.
16 !+
17 !+ OUTPUT: ARRAYS COMPLETE IN 3D.
18 !
19 !history J-M HERVOUET (LNHE)
20 !+ 23/06/2008
21 !+ V5P9
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 !+ 19/03/2014
38 !+ V7P0
39 !+ Boundary segments have now their own numbering, independent of
40 !+ boundary points numbering.
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| IKLBOR |-->| CONNECTIVITY TABLE OF BOUNDARY ELEMENTS
44 !| IKLE3 |<--| CONNECTIVITY TABLE IN 3D
45 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS IN 2D
46 !| NELBOR |-->| FOR THE KTH BOUNDARY EDGE, GIVES THE CORRESPONDING
47 !| | | ELEMENT.
48 !| NELEB |-->| NUMBER OF BOUNDARY ELEMENTS
49 !| | | AT THE BEGINNING : IN 2D, AT THE EXIT, IN 3D
50 !| | | NUMBER OF BOUNDARY ELEMENTS
51 !| NELEBX |-->| MAXIMUM NUMBER OF BOUNDARY ELEMENTS
52 !| | | USED AS FIRST DIMENSION OF IKLBOR
53 !| NELEM2 |-->| NUMBER OF ELEMENTS IN 2D
54 !| NETAGE |-->| NUMBER OF PLANES - 1
55 !| NPLAN |-->| NUMBER OF PLANES
56 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D
57 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
58 !| NULONE |-->| GOES WITH ARRAY NELBOR. NELBOR GIVES THE
59 !| | | ADJACENT ELEMENT, NULONE GIVES THE LOCAL
60 !| | | NUMBER OF THE FIRST NODE OF THE BOUNDARY EDGE
61 !| | | I.E. 1, 2 OR 3 FOR TRIANGLES.
62 !| | | !!!!! HERE IN 3D !!!!!!
63 !| | | WITH PRISMS, A CONDITION IS THAT THE FIRST
64 !| | | NPTFR VALUES OF MESH3D%NULONE ARE EQUAL
65 !| | | TO MESH2D%NULONE (SEE CALL TO STOSEG41 IN INBIEF)
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !
68  USE bief, ex_eleb3d => eleb3d
69 !
71  IMPLICIT NONE
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  INTEGER, INTENT(IN) :: NELEM2,NPOIN2,NPLAN,NETAGE,NPTFR
76  INTEGER, INTENT(IN) :: NELEBX
77  INTEGER, INTENT(INOUT) :: NELEB
78  INTEGER, INTENT(INOUT) :: IKLE3(nelem2,netage,6)
79  INTEGER, INTENT(INOUT) :: IKLBOR(nelebx,4),NULONE(nelebx,4)
80  INTEGER, INTENT(INOUT) :: NELBOR(nelebx),NBOR(nptfr*nplan)
81 !
82 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83 !
84  INTEGER IELEM,IPOIN,IELEB2,IELEB3,K1,K2,IETAGE,IPTFR,I1,I2,I3
85  INTEGER IPLAN
86 !
87 !-----------------------------------------------------------------------
88 !
89 ! CONNECTIVITY TABLES FOR BOUNDARY FACES --> IKLBOR , NBOR ,
90 ! CORRESPONDENCE BETWEEN LOCAL BOUNDARY NUMBERS
91 ! AND 3D LOCAL NUMBERS --> NULONE
92 !
93 ! LATERAL BOUNDARIES: BUILDING NBOR
94 !
95  DO iplan=2,nplan
96  DO iptfr=1,nptfr
97  nbor(iptfr+(iplan-1)*nptfr)=nbor(iptfr)+(iplan-1)*npoin2
98  ENDDO
99  ENDDO
100 !
101 ! LATERAL BOUNDARIES
102 !
103  DO ietage = 1,netage
104  DO ieleb2=1,neleb
105  ieleb3=ieleb2+(ietage-1)*neleb
106  k1=iklbor(ieleb2,1)
107  k2=iklbor(ieleb2,2)
108  iklbor(ieleb3,1) = k1 + (ietage-1)*nptfr
109  iklbor(ieleb3,2) = k2 + (ietage-1)*nptfr
110  iklbor(ieleb3,3) = iklbor(ieleb3,2) + nptfr
111  iklbor(ieleb3,4) = iklbor(ieleb3,1) + nptfr
112  ielem = nelbor(ieleb2)
113  ipoin = nbor(k1)
114  nelbor(ieleb3)=ielem+(ietage-1)*nelem2
115  i1=ikle3(ielem,1,1)
116  i2=ikle3(ielem,1,2)
117  i3=ikle3(ielem,1,3)
118  IF(ipoin.EQ.i1) THEN
119  nulone(ieleb3,1) = 1
120  nulone(ieleb3,2) = 2
121  nulone(ieleb3,3) = 5
122  nulone(ieleb3,4) = 4
123  ELSEIF(ipoin.EQ.i2) THEN
124  nulone(ieleb3,1) = 2
125  nulone(ieleb3,2) = 3
126  nulone(ieleb3,3) = 6
127  nulone(ieleb3,4) = 5
128  ELSEIF(ipoin.EQ.i3) THEN
129  nulone(ieleb3,1) = 3
130  nulone(ieleb3,2) = 1
131  nulone(ieleb3,3) = 4
132  nulone(ieleb3,4) = 6
133  ELSE
134  WRITE(lu,102) ipoin,i1,i2,i3,k1,ielem
135  CALL plante(1)
136  stop
137  ENDIF
138  ENDDO
139  ENDDO
140 !
141 !-----------------------------------------------------------------------
142 !
143 ! NOW NELEB BECOMES THE 3D VALUE
144 !
145  neleb=neleb*netage
146 !
147 !-----------------------------------------------------------------------
148 !
149 102 FORMAT(' ELEB3D: PROBLEM WHEN BUILDING NULONE, IPOIN =',
150  & i6,' I1,2,3=',i6,1x,i6,1x,i6,' K1=',i6,' IELEM=',i6)
151 !
152 !-----------------------------------------------------------------------
153 !
154  RETURN
155  END
subroutine eleb3d(IKLE3, NBOR, NELBOR, IKLBOR, NELEB, NELEBX, NULONE, NELEM2, NPOIN2, NPLAN, NETAGE, NPTFR)
Definition: eleb3d.f:8
Definition: bief.f:3