The TELEMAC-MASCARET system  trunk
assex3.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE assex3
3 ! *****************
4 !
5  &(xm,sto,name,ielm1,ielm2,typext,xmt,dim1xmt,dim2xmt,stoxmt,
6  & mesh,nelmax,eltseg,oriseg)
7 !
8 !***********************************************************************
9 ! BIEF V6P3 21/08/2010
10 !***********************************************************************
11 !
12 !brief ASSEMBLES MATRICES EXTRA-DIAGONAL TERMS
13 !+ IN THE CASE OF EDGE-BASED STORAGE.
14 !
15 !history J-M HERVOUET (LNHE)
16 !+ 05/02/2010
17 !+ V6P0
18 !+
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history J-M HERVOUET (LNHE)
33 !+ 25/08/2011
34 !+ V6P2
35 !+ Tetrahedron element added
36 !
37 !history S. PAVAN (LNHE)
38 !+ 01/08/2013
39 !+ V6P3
40 !+ Arguments added to AS3_1111_Q
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| DIM1XMT |-->| FIRST DIMENSION OF XMT
44 !| DIM2XMT |-->| SECOND DIMENSION OF XMT
45 !| ELTSEG |-->| SEGMENTS IN AN ELEMENT
46 !| IELM1 |-->| ELEMENT OF LINES IN THE MATRIX
47 !| IELM2 |-->| ELEMENT OF ROWS IN THE MATRIX
48 !| MESH |-->| MESH-STRUCTURE
49 !| NAME |-->| FORTRAN NAME OF THE MATRIX
50 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS IN THE MESH
51 !| ORISEG |-->| ORIENTATION OF SEGMENTS
52 !| STO |-->| STORAGE REQUIRED IN XM 1: EBE 3: EDGE-BASED
53 !| STOXMT |-->| STORAGE OF OFF-DIAGONAL TERMS
54 !| | | 1: XMT(NELMAX,*) 2: XMT(*,NELMAX)
55 !| TYPEXT |-->| TYPE OF OFF-DIAGONAL TERMS
56 !| XM |<->| ASSEMBLED OFF-DIAGONAL TERMS
57 !| XMT |<->| OFF-DIAGONAL TERMS OF THE WORK MATRIX
58 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59 !
60  USE bief, ex_assex3 => assex3
61 !
63  IMPLICIT NONE
64 !
65 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 !
67  INTEGER , INTENT(INOUT) :: STO
68  CHARACTER(LEN=6), INTENT(IN) :: NAME
69  INTEGER , INTENT(IN) :: IELM1,IELM2,NELMAX
70  INTEGER , INTENT(IN) :: DIM1XMT,DIM2XMT,STOXMT
71  INTEGER , INTENT(IN) :: ELTSEG(nelmax,*)
72  INTEGER , INTENT(IN) :: ORISEG(nelmax,*)
73  CHARACTER(LEN=1), INTENT(IN) :: TYPEXT
74  DOUBLE PRECISION, INTENT(INOUT) :: XMT(dim1xmt,dim2xmt)
75  DOUBLE PRECISION, INTENT(INOUT) :: XM(*)
76  TYPE(bief_mesh) , INTENT(IN) :: MESH
77 !
78 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79 !
80  INTEGER NELEM,STOM
81 !
82 !-----------------------------------------------------------------------
83 !
84 ! EXTRACTS MATRIX M CHARACTERISTICS
85 !
86  stom = sto
87  IF(stom.NE.1) THEN
88  WRITE(lu,501) name,stom
89 501 FORMAT(1x,'ASSEX3 (BIEF) : MATRIX M (REAL NAME:',a6,')',/,1x,
90  & ' UNEXPECTED STORAGE: ',1i6)
91  CALL plante(1)
92  stop
93  ENDIF
94 !
95 !-----------------------------------------------------------------------
96 !
97  IF( (dimens(ielm1).NE.mesh%DIM1) .AND.
98  & (ielm1.NE.81.AND.ielm2.NE.81) ) THEN
99 ! BOUNDARY MATRIX : NOT TREATED HERE
100  WRITE(lu,101) name
101  WRITE(lu,201) ielm1,ielm2
102  WRITE(lu,301)
103  CALL plante(1)
104  stop
105  ENDIF
106 !
107  IF(dimens(ielm1).EQ.mesh%DIM1) THEN
108 ! NORMAL MATRIX
109  nelem = mesh%NELEM
110  ELSE
111 ! BOUNDARY MATRIX
112  nelem = mesh%NELEB
113  ENDIF
114 !
115 !-----------------------------------------------------------------------
116 !
117  IF(ielm1.EQ.11.AND.ielm2.EQ.11) THEN
118 !
119 ! P1-P1 TRIANGLES MATRIX
120 !
121  IF(typext.EQ.'S') THEN
122  CALL as3_1111_s(xm,bief_nbseg(11,mesh),
123  & xmt,nelmax,nelem,
124  & eltseg(1,1),eltseg(1,2),eltseg(1,3))
125  ELSEIF(typext.EQ.'Q') THEN
126  CALL as3_1111_q(xm,bief_nbseg(11,mesh),
127  & xmt,dim1xmt,dim2xmt,nelmax,nelem,stoxmt,
128  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
129  & oriseg(1,1),oriseg(1,2),oriseg(1,3))
130  ENDIF
131 !
132  ELSEIF(ielm1.EQ.11.AND.ielm2.EQ.12) THEN
133 !
134 ! P1-QB TRIANGLES MATRIX
135 !
136  CALL as3_1112(xm,bief_nbseg(ielm1,mesh),
137  & bief_nbseg(ielm2,mesh),
138  & xmt,nelmax,nelem,
139  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
140  & eltseg(1,4),eltseg(1,5),eltseg(1,6),
141  & oriseg(1,1),oriseg(1,2),oriseg(1,3))
142 !
143  ELSEIF(ielm1.EQ.11.AND.ielm2.EQ.13) THEN
144 !
145 ! P1-QUADRATIC TRIANGLES MATRIX
146 !
147  CALL as3_1113(xm,bief_nbseg(ielm1,mesh),
148  & bief_nbseg(ielm2,mesh),
149  & xmt,nelmax,nelem,eltseg,oriseg)
150 !
151  ELSEIF(ielm1.EQ.13.AND.ielm2.EQ.11) THEN
152 !
153 ! QUADRATIC-P1 TRIANGLES MATRIX
154 !
155  CALL as3_1311(xm,bief_nbseg(ielm2,mesh),
156  & bief_nbseg(ielm1,mesh),
157  & xmt,nelmax,nelem,eltseg,oriseg)
158 !
159  ELSEIF(ielm1.EQ.12.AND.ielm2.EQ.11) THEN
160 !
161 ! P1-QB TRIANGLES MATRIX
162 !
163  CALL as3_1211(xm,bief_nbseg(11,mesh),
164  & bief_nbseg(12,mesh),
165  & xmt,nelmax,nelem,
166  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
167  & eltseg(1,4),eltseg(1,5),eltseg(1,6),
168  & oriseg(1,1),oriseg(1,2),oriseg(1,3))
169 !
170  ELSEIF(ielm1.EQ.12.AND.ielm2.EQ.12) THEN
171 !
172 ! QB-QB TRIANGLES MATRIX
173 !
174  IF(typext.EQ.'S') THEN
175  CALL as3_1212_s(xm,bief_nbseg(11,mesh),
176  & bief_nbseg(12,mesh),xmt,nelmax,nelem,
177  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
178  & eltseg(1,4),eltseg(1,5),eltseg(1,6))
179  ELSEIF(typext.EQ.'Q') THEN
180  CALL as3_1212_q(xm,bief_nbseg(11,mesh),
181  & bief_nbseg(12,mesh),
182  & xmt,nelmax,nelem,
183  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
184  & eltseg(1,4),eltseg(1,5),eltseg(1,6),
185  & oriseg(1,1),oriseg(1,2),oriseg(1,3))
186  ENDIF
187 !
188  ELSEIF(ielm1.EQ.13.AND.ielm2.EQ.13) THEN
189 !
190 ! QUADRATIC TRIANGLES MATRIX
191 !
192  IF(typext.EQ.'S') THEN
193  CALL as3_1313_s(xm,bief_nbseg(ielm1,mesh),
194  & xmt,dim1xmt,dim2xmt,stoxmt,
195  & nelmax,nelem,eltseg)
196  ELSEIF(typext.EQ.'Q') THEN
197  CALL as3_1313_q(xm,bief_nbseg(ielm1,mesh),
198  & xmt,dim1xmt,dim2xmt,stoxmt,
199  & nelmax,nelem,eltseg,oriseg)
200  ENDIF
201 !
202  ELSEIF(ielm1.EQ.41.AND.ielm2.EQ.41) THEN
203 !
204 ! PRISMS MATRIX
205 !
206  IF(typext.EQ.'S') THEN
207  CALL as3_4141_s(xm,bief_nbseg(ielm1,mesh),
208  & xmt,dim1xmt,dim2xmt,stoxmt,
209  & nelmax,nelem,eltseg)
210  ELSEIF(typext.EQ.'Q') THEN
211  CALL as3_4141_q(xm,bief_nbseg(ielm1,mesh),
212  & xmt,dim1xmt,dim2xmt,stoxmt,
213  & nelmax,nelem,eltseg,oriseg)
214  ENDIF
215 !
216  ELSEIF( (ielm1.EQ.31.AND.ielm2.EQ.31).OR.
217  & (ielm1.EQ.51.AND.ielm2.EQ.51) ) THEN
218 !
219 ! TETRAHEDRONS MATRIX
220 !
221  IF(typext.EQ.'S') THEN
222  CALL as3_3131_s(xm,bief_nbseg(ielm1,mesh),
223  & xmt,dim1xmt,dim2xmt,stoxmt,
224  & nelmax,nelem,
225  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
226  & eltseg(1,4),eltseg(1,5),eltseg(1,6))
227  ELSEIF(typext.EQ.'Q') THEN
228  CALL as3_3131_q(xm,bief_nbseg(ielm1,mesh),
229  & xmt,dim1xmt,dim2xmt,stoxmt,
230  & nelmax,nelem,
231  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
232  & eltseg(1,4),eltseg(1,5),eltseg(1,6),
233  & oriseg(1,1),oriseg(1,2),oriseg(1,3),
234  & oriseg(1,4),oriseg(1,5),oriseg(1,6))
235  ENDIF
236 !
237  ELSEIF(ielm1.EQ.81.AND.ielm2.EQ.81) THEN
238 !
239 ! TETRAHEDRONS MATRIX
240 !
241  IF(typext.EQ.'S') THEN
242  CALL as3_8181_s(xm,bief_nbseg(ielm1,mesh),
243  & xmt,dim1xmt,dim2xmt,stoxmt,
244  & nelmax,nelem,
245  & eltseg(1,1),eltseg(1,2),eltseg(1,3))
246  ELSEIF(typext.EQ.'Q') THEN
247  CALL as3_8181_q(xm,bief_nbseg(ielm1,mesh),
248  & xmt,dim1xmt,dim2xmt,stoxmt,
249  & nelmax,nelem,
250  & eltseg(1,1),eltseg(1,2),eltseg(1,3),
251  & oriseg(1,1),oriseg(1,2),oriseg(1,3))
252  ENDIF
253 !
254  ELSE
255 !
256 ! IELM1 / IELM2 COMBINATION NOT IMPLEMENTED: ERROR
257 !
258  WRITE(lu,101) name
259  WRITE(lu,201) ielm1,ielm2
260  WRITE(lu,301)
261  CALL plante(1)
262  stop
263 !
264  ENDIF
265 !
266 !-----------------------------------------------------------------------
267 !
268 ! NEW TYPE OF STORAGE
269 !
270  sto=3
271 !
272 !-----------------------------------------------------------------------
273 !
274 101 FORMAT(1x,'ASSEX3 (BIEF) : MATRIX M (REAL NAME:',a6,')')
275 201 FORMAT(1x,' IELM1 = ',1i6,' IELM2 = ',1i6)
276 301 FORMAT(1x,' THIS CASE IS NOT IMPLEMENTED')
277 !
278 !-----------------------------------------------------------------------
279 !
280  RETURN
281  END
282 
integer function dimens(IELM)
Definition: dimens.f:7
subroutine as3_1311(XM, NSEG11, NSEG13, XMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_1311.f:7
subroutine as3_8181_s(XM, NSEG, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3)
Definition: as3_8181_s.f:8
subroutine as3_1112(XM, NSEG11, NSEG12, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_1112.f:9
subroutine as3_1313_q(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_1313_q.f:7
subroutine as3_1111_q(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, NELMAX, NELEM, STOXMT, ELTSEG1, ELTSEG2, ELTSEG3, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_1111_q.f:8
subroutine as3_4141_s(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG)
Definition: as3_4141_s.f:7
subroutine as3_4141_q(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_4141_q.f:7
subroutine as3_1313_s(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG)
Definition: as3_1313_s.f:7
subroutine as3_1113(XM, NSEG11, NSEG13, XMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_1113.f:7
subroutine as3_8181_q(XM, NSEG, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_8181_q.f:9
subroutine as3_1111_s(XM, NSEG1, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3)
Definition: as3_1111_s.f:7
subroutine as3_3131_q(XM, NSEG, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6, ORISEG1, ORISEG2, ORISEG3, ORISEG4, ORISEG5, ORISEG6)
Definition: as3_3131_q.f:10
subroutine as3_1211(XM, NSEG11, NSEG12, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_1211.f:9
subroutine as3_3131_s(XM, NSEG, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6)
Definition: as3_3131_s.f:8
subroutine assex3(XM, STO, NAME, IELM1, IELM2, TYPEXT, XMT, DIM1XMT, DIM2XMT, STOXMT, MESH, NELMAX, ELTSEG, ORISEG)
Definition: assex3.f:8
subroutine as3_1212_q(XM, NSEG11, NSEG12, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_1212_q.f:9
integer function bief_nbseg(IELM, MESH)
Definition: bief_nbseg.f:7
subroutine as3_1212_s(XM, NSEG11, NSEG12, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6)
Definition: as3_1212_s.f:8
Definition: bief.f:3