The TELEMAC-MASCARET system  trunk
as3_1113.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE as3_1113
3 ! *******************
4 !
5  &(xm,nseg11,nseg13,xmt,nelmax,nelem,eltseg,oriseg)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief ASSEMBLES EXTRA-DIAGONAL TERMS OF MATRICES (XMT)
12 !+ IN THE CASE OF EDGE-BASED STORAGE.
13 !+
14 !+ CASE OF LINEAR - QUADRATIC ELEMENT.
15 !code
16 !+ LOCAL NUMBERING OF SEGMENTS IN A TRIANGLE (SEE COMP_SEG)
17 !+
18 !+ 01 --> 1 - 2
19 !+ 02 --> 2 - 3
20 !+ 03 --> 3 - 1
21 !+ 04 --> 1 - 4
22 !+ 05 --> 2 - 5
23 !+ 06 --> 3 - 6
24 !+ 07 --> 2 - 4
25 !+ 08 --> 3 - 5
26 !+ 09 --> 1 - 6
27 !+ 10 --> 1 - 5
28 !+ 11 --> 2 - 6
29 !+ 12 --> 3 - 4
30 !+ 13 --> 4 - 5
31 !+ 14 --> 5 - 6
32 !+ 15 --> 6 - 4
33 !+
34 !+ TERMS IN XMT (STORAGE GIVEN BY ARRAY ACQ(3,6,2) IN MATRIY):
35 !+
36 !+ 01 --> 1-2
37 !+ 02 --> 1-3
38 !+ 03 --> 1-4
39 !+ 04 --> 1-5
40 !+ 05 --> 1-6
41 !+ 06 --> 2-1
42 !+ 07 --> 2-3
43 !+ 08 --> 2-4
44 !+ 09 --> 2-5
45 !+ 10 --> 2-6
46 !+ 11 --> 3-1
47 !+ 12 --> 3-2
48 !+ 13 --> 3-4
49 !+ 14 --> 3-5
50 !+ 15 --> 3-6
51 !
52 !history J-M HERVOUET (LNHE)
53 !+ 05/02/2010
54 !+ V6P0
55 !+
56 !
57 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
58 !+ 13/07/2010
59 !+ V6P0
60 !+ Translation of French comments within the FORTRAN sources into
61 !+ English comments
62 !
63 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
64 !+ 21/08/2010
65 !+ V6P0
66 !+ Creation of DOXYGEN tags for automated documentation and
67 !+ cross-referencing of the FORTRAN sources
68 !
69 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
70 !| ELTSEG |-->| SEGMENTS OF A TRIANGLE
71 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
72 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
73 !| NSEG11 |-->| NUMBER OF LINEAR SEGMENTS
74 !| NSEG13 |-->| NUMBER OF QUADRATIC SEGMENTS -
75 !| | | THE NUMBER OF PURELY QUADRATIC SEGMENTS
76 !| | | (THEY ARE NOT CONSIDERED IN RECTANGULAR
77 !| | | MATRICES)
78 !| ORISEG |-->| ORIENTATION OF SEGMENTS
79 !| XM |<--| ASSEMBLED OFF-DIAGONAL TERMS XA12,23,31
80 !| XMT |-->| ELEMENT BY ELEMENT STORAGE OF MATRIX
81 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82 !
84  IMPLICIT NONE
85 !
86 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
87 !
88  INTEGER , INTENT(IN) :: NELMAX,NELEM,NSEG11,NSEG13
89  INTEGER , INTENT(IN) :: ELTSEG(nelmax,15)
90  INTEGER , INTENT(IN) :: ORISEG(nelmax,15)
91  DOUBLE PRECISION, INTENT(IN) :: XMT(nelmax,*)
92  DOUBLE PRECISION, INTENT(INOUT) :: XM(nseg11+nseg13-3*nelem)
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  INTEGER ISEG,IELEM
97 !
98 !-----------------------------------------------------------------------
99 !
100 ! INITIALISES
101 !
102 ! WHERE THERE WILL BE ASSEMBLING
103  DO iseg = 1 , nseg11+nseg13-6*nelem
104  xm(iseg) = 0.d0
105  ENDDO
106 !
107 ! ASSEMBLES, LINEAR PART
108 !
109  DO ielem = 1,nelem
110 !
111 ! SEGMENT 1 (TERMS 1-2 AND 2-1)
112 !
113  xm(eltseg(ielem,1)+nseg11*(oriseg(ielem,1)-1))
114  & =xm(eltseg(ielem,1)+nseg11*(oriseg(ielem,1)-1))+xmt(ielem,01)
115  xm(eltseg(ielem,1)+nseg11*(2-oriseg(ielem,1)))
116  & =xm(eltseg(ielem,1)+nseg11*(2-oriseg(ielem,1)))+xmt(ielem,06)
117 !
118 ! SEGMENT 2 (TERMS 2-3 AND 3-2)
119 !
120  xm(eltseg(ielem,2)+nseg11*(oriseg(ielem,2)-1))
121  & =xm(eltseg(ielem,2)+nseg11*(oriseg(ielem,2)-1))+xmt(ielem,07)
122  xm(eltseg(ielem,2)+nseg11*(2-oriseg(ielem,2)))
123  & =xm(eltseg(ielem,2)+nseg11*(2-oriseg(ielem,2)))+xmt(ielem,12)
124 !
125 ! SEGMENT 3 (TERMS 3-1 AND 1-3)
126 !
127  xm(eltseg(ielem,3)+nseg11*(oriseg(ielem,3)-1))
128  & =xm(eltseg(ielem,3)+nseg11*(oriseg(ielem,3)-1))+xmt(ielem,11)
129  xm(eltseg(ielem,3)+nseg11*(2-oriseg(ielem,3)))
130  & =xm(eltseg(ielem,3)+nseg11*(2-oriseg(ielem,3)))+xmt(ielem,02)
131 !
132  ENDDO
133 !
134 ! ASSEMBLES, SEGMENTS BETWEEN LINEAR AND QUADRATIC POINTS
135 ! (I.E. THE REST BUT NOT 13, 14 AND 15)
136 !
137 ! ASSEMBLES THE QUADRATIC PART
138 ! BETWEEN XM(2*NSEG11+1) AND XM(NSEG11+NSEG13-3*NELEM)
139 ! SEE IN COMP_SEG HOW ELTSEG4,5,6,7,8,9,10,11,12 ARE BUILT,
140 ! THEIR NUMBERING STARTS AT NSEG11+1, HENCE HERE THE STORAGE IN
141 ! XM STARTS AT 2*NSEG11+1
142 !
143 ! THE 6 SEGMENTS SHARED WITH OTHER TRIANGLES NEED ASSEMBLING
144 !
145  DO ielem = 1,nelem
146 ! TERM OF SEGMENT 1-4
147  xm(eltseg(ielem,04)+nseg11) =
148  & xm(eltseg(ielem,04)+nseg11) + xmt(ielem,03)
149 ! TERM OF SEGMENT 2-5
150  xm(eltseg(ielem,05)+nseg11) =
151  & xm(eltseg(ielem,05)+nseg11) + xmt(ielem,09)
152 ! TERM OF SEGMENT 3-6
153  xm(eltseg(ielem,06)+nseg11) =
154  & xm(eltseg(ielem,06)+nseg11) + xmt(ielem,15)
155 ! TERM OF SEGMENT 2-4
156  xm(eltseg(ielem,07)+nseg11) =
157  & xm(eltseg(ielem,07)+nseg11) + xmt(ielem,08)
158 ! TERM OF SEGMENT 3-5
159  xm(eltseg(ielem,08)+nseg11) =
160  & xm(eltseg(ielem,08)+nseg11) + xmt(ielem,14)
161 ! TERM OF SEGMENT 1-6
162  xm(eltseg(ielem,09)+nseg11) =
163  & xm(eltseg(ielem,09)+nseg11) + xmt(ielem,05)
164  ENDDO
165 !
166 ! THE 3 SEGMENTS INSIDE THE TRIANGLE NEED NO ASSEMBLY
167 !
168  DO ielem = 1,nelem
169 ! TERM OF SEGMENT 1-5
170  xm(eltseg(ielem,10)+nseg11) = xmt(ielem,04)
171 ! TERM OF SEGMENT 2-6
172  xm(eltseg(ielem,11)+nseg11) = xmt(ielem,10)
173 ! TERM OF SEGMENT 3-4
174  xm(eltseg(ielem,12)+nseg11) = xmt(ielem,13)
175  ENDDO
176 !
177 !-----------------------------------------------------------------------
178 !
179  RETURN
180  END
subroutine as3_1113(XM, NSEG11, NSEG13, XMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_1113.f:7