The TELEMAC-MASCARET system  trunk
as3_1311.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE as3_1311
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 CAQ(6,3,2) IN MATRIY):
35 !+
36 !+ 01 --> 1-2
37 !+ 02 --> 1-3
38 !+ 03 --> 2-1
39 !+ 04 --> 2-3
40 !+ 05 --> 3-1
41 !+ 06 --> 3-2
42 !+ 07 --> 4-1
43 !+ 08 --> 4-2
44 !+ 09 --> 4-3
45 !+ 10 --> 5-1
46 !+ 11 --> 5-2
47 !+ 12 --> 5-3
48 !+ 13 --> 6-1
49 !+ 14 --> 6-2
50 !+ 15 --> 6-3
51 !
52 !history J-M HERVOUET (LNHE)
53 !+ 02/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 |-->| SEGMENT 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 ! -6*NELEM : SEGMENTS 10,11,12 NEED NO ASSEMBLY
103 ! SEGMENTS 13,14,15 ARE NOT CONSIDERED
104  DO iseg = 1 , nseg11+nseg13-6*nelem
105  xm(iseg) = 0.d0
106  ENDDO
107 !
108 ! ASSEMBLES LINEAR PART
109 !
110  DO ielem = 1,nelem
111 !
112 ! SEGMENT 1 (TERMS 1-2 AND 2-1)
113 !
114  xm(eltseg(ielem,1)+nseg11*(oriseg(ielem,1)-1))
115  & =xm(eltseg(ielem,1)+nseg11*(oriseg(ielem,1)-1))+xmt(ielem,01)
116  xm(eltseg(ielem,1)+nseg11*(2-oriseg(ielem,1)))
117  & =xm(eltseg(ielem,1)+nseg11*(2-oriseg(ielem,1)))+xmt(ielem,03)
118 !
119 ! SEGMENT 2 (TERMS 2-3 AND 3-2)
120 !
121  xm(eltseg(ielem,2)+nseg11*(oriseg(ielem,2)-1))
122  & =xm(eltseg(ielem,2)+nseg11*(oriseg(ielem,2)-1))+xmt(ielem,04)
123  xm(eltseg(ielem,2)+nseg11*(2-oriseg(ielem,2)))
124  & =xm(eltseg(ielem,2)+nseg11*(2-oriseg(ielem,2)))+xmt(ielem,06)
125 !
126 ! SEGMENT 3 (TERMS 3-1 AND 1-3)
127 !
128  xm(eltseg(ielem,3)+nseg11*(oriseg(ielem,3)-1))
129  & =xm(eltseg(ielem,3)+nseg11*(oriseg(ielem,3)-1))+xmt(ielem,05)
130  xm(eltseg(ielem,3)+nseg11*(2-oriseg(ielem,3)))
131  & =xm(eltseg(ielem,3)+nseg11*(2-oriseg(ielem,3)))+xmt(ielem,02)
132 !
133  ENDDO
134 !
135 ! ASSEMBLES, SEGMENTS BETWEEN LINEAR AND QUADRATIC POINTS
136 ! (I.E. THE REST BUT NOT 13, 14 AND 15)
137 !
138 ! ASSEMBLES THE QUADRATIC PART
139 ! BETWEEN XM(2*NSEG11+1) AND XM(NSEG11+NSEG13-3*NELEM)
140 ! SEE IN COMP_SEG HOW ELTSEG4,5,6,7,8,9,10,11,12 ARE BUILT,
141 ! THEIR NUMBERING STARTS AT NSEG11+1, HENCE HERE THE STORAGE IN
142 ! XM STARTS AT 2*NSEG11+1
143 !
144  DO ielem = 1,nelem
145 ! TERM OF SEGMENT 1-4
146  xm(eltseg(ielem,04)+nseg11) =
147  & xm(eltseg(ielem,04)+nseg11) + xmt(ielem,07)
148 ! TERM OF SEGMENT 2-5
149  xm(eltseg(ielem,05)+nseg11) =
150  & xm(eltseg(ielem,05)+nseg11) + xmt(ielem,11)
151 ! TERM OF SEGMENT 3-6
152  xm(eltseg(ielem,06)+nseg11) =
153  & xm(eltseg(ielem,06)+nseg11) + xmt(ielem,15)
154 ! TERM OF SEGMENT 2-4
155  xm(eltseg(ielem,07)+nseg11) =
156  & xm(eltseg(ielem,07)+nseg11) + xmt(ielem,08)
157 ! TERM OF SEGMENT 3-5
158  xm(eltseg(ielem,08)+nseg11) =
159  & xm(eltseg(ielem,08)+nseg11) + xmt(ielem,12)
160 ! TERM OF SEGMENT 1-6
161  xm(eltseg(ielem,09)+nseg11) =
162  & xm(eltseg(ielem,09)+nseg11) + xmt(ielem,13)
163  ENDDO
164 !
165 ! THESE 3 SEGMENTS ARE NOT SHARED, NO ASSEMBLY
166 !
167  DO ielem = 1,nelem
168 ! TERM OF SEGMENT 1-5
169  xm(eltseg(ielem,10)+nseg11) = xmt(ielem,10)
170 ! TERM OF SEGMENT 2-6
171  xm(eltseg(ielem,11)+nseg11) = xmt(ielem,14)
172 ! TERM OF SEGMENT 3-4
173  xm(eltseg(ielem,12)+nseg11) = xmt(ielem,09)
174  ENDDO
175 !
176 !-----------------------------------------------------------------------
177 !
178  RETURN
179  END
subroutine as3_1311(XM, NSEG11, NSEG13, XMT, NELMAX, NELEM, ELTSEG, ORISEG)
Definition: as3_1311.f:7