The TELEMAC-MASCARET system  trunk
as3_1313_s.f
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE as3_1313_s
3 ! *********************
4 !
5  &(xm,nseg1,xmt,dim1xmt,dim2xmt,stoxmt,nelmax,nelem,eltseg)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief ASSEMBLES MATRICES EXTRA-DIAGONAL TERMS
12 !+ IN THE CASE OF EDGE-BASED STORAGE.
13 !+
14 !+ CASE OF QUADRATIC TRIANGLE AND SYMMETRICAL MATRIX.
15 !code
16 !+ LOCAL NUMBERING OF SEGMENTS CHOSEN HERE IN A TRIANGLE
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 !+ LOCAL NUMBERING OF ELEMENT BY ELEMENT EXTRA-DIAGONAL TERMS
35 !+
36 !+ 01 : POINTS 1-2
37 !+ 02 : POINTS 1-3
38 !+ 03 : POINTS 1-4
39 !+ 04 : POINTS 1-5
40 !+ 05 : POINTS 1-6
41 !+ 06 : POINTS 2-3
42 !+ 07 : POINTS 2-4
43 !+ 08 : POINTS 2-5
44 !+ 09 : POINTS 2-6
45 !+ 10 : POINTS 3-4
46 !+ 11 : POINTS 3-5
47 !+ 12 : POINTS 3-6
48 !+ 13 : POINTS 4-5
49 !+ 14 : POINTS 4-6
50 !+ 15 : POINTS 5-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 !| DIM1XMT |-->| FIRST DIMENSION OF XMT
71 !| DIM2XMT |-->| SECOND DIMENSION OF XMT
72 !| ELTSEG |-->| SEGMENTS OF A TRIANGLE
73 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
74 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
75 !| NSEG1 |-->| NUMBER OF SEGMENTS
76 !| ORISEG |-->| ORIENTATION OF SEGMENTS
77 !| STOXMT |-->| STORAGE OF XMT 1: (NELMAX,*)
78 !| | | 2: (*,NELMAX)
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,NSEG1
89  INTEGER , INTENT(IN) :: DIM1XMT,DIM2XMT,STOXMT
90  INTEGER , INTENT(IN) :: ELTSEG(nelmax,15)
91  DOUBLE PRECISION, INTENT(IN) :: XMT(dim1xmt,dim2xmt)
92  DOUBLE PRECISION, INTENT(INOUT) :: XM(nseg1)
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  INTEGER ISEG,IELEM
97 !
98 !-----------------------------------------------------------------------
99 !
100 ! INITIALISES
101 !
102  DO iseg = 1 , nseg1
103  xm(iseg) = 0.d0
104  ENDDO
105 !
106 !-----------------------------------------------------------------------
107 !
108 ! ASSEMBLES
109 !
110 !-----------------------------------------------------------------------
111 !
112  IF(stoxmt.EQ.1) THEN
113 !
114  DO ielem = 1,nelem
115 !
116  xm(eltseg(ielem,01))=xm(eltseg(ielem,01))+xmt(ielem,01)
117  xm(eltseg(ielem,02))=xm(eltseg(ielem,02))+xmt(ielem,06)
118  xm(eltseg(ielem,03))=xm(eltseg(ielem,03))+xmt(ielem,02)
119  xm(eltseg(ielem,04))=xm(eltseg(ielem,04))+xmt(ielem,03)
120  xm(eltseg(ielem,05))=xm(eltseg(ielem,05))+xmt(ielem,08)
121  xm(eltseg(ielem,06))=xm(eltseg(ielem,06))+xmt(ielem,12)
122  xm(eltseg(ielem,07))=xm(eltseg(ielem,07))+xmt(ielem,07)
123  xm(eltseg(ielem,08))=xm(eltseg(ielem,08))+xmt(ielem,11)
124  xm(eltseg(ielem,09))=xm(eltseg(ielem,09))+xmt(ielem,05)
125  xm(eltseg(ielem,10))=xm(eltseg(ielem,10))+xmt(ielem,04)
126  xm(eltseg(ielem,11))=xm(eltseg(ielem,11))+xmt(ielem,09)
127  xm(eltseg(ielem,12))=xm(eltseg(ielem,12))+xmt(ielem,10)
128  xm(eltseg(ielem,13))=xm(eltseg(ielem,13))+xmt(ielem,13)
129  xm(eltseg(ielem,14))=xm(eltseg(ielem,14))+xmt(ielem,15)
130  xm(eltseg(ielem,15))=xm(eltseg(ielem,15))+xmt(ielem,14)
131 !
132  ENDDO
133 !
134  ELSEIF(stoxmt.EQ.2) THEN
135 !
136  DO ielem = 1,nelem
137 !
138  xm(eltseg(ielem,01))=xm(eltseg(ielem,01))+xmt(01,ielem)
139  xm(eltseg(ielem,02))=xm(eltseg(ielem,02))+xmt(06,ielem)
140  xm(eltseg(ielem,03))=xm(eltseg(ielem,03))+xmt(02,ielem)
141  xm(eltseg(ielem,04))=xm(eltseg(ielem,04))+xmt(03,ielem)
142  xm(eltseg(ielem,05))=xm(eltseg(ielem,05))+xmt(08,ielem)
143  xm(eltseg(ielem,06))=xm(eltseg(ielem,06))+xmt(12,ielem)
144  xm(eltseg(ielem,07))=xm(eltseg(ielem,07))+xmt(07,ielem)
145  xm(eltseg(ielem,08))=xm(eltseg(ielem,08))+xmt(11,ielem)
146  xm(eltseg(ielem,09))=xm(eltseg(ielem,09))+xmt(05,ielem)
147  xm(eltseg(ielem,10))=xm(eltseg(ielem,10))+xmt(04,ielem)
148  xm(eltseg(ielem,11))=xm(eltseg(ielem,11))+xmt(09,ielem)
149  xm(eltseg(ielem,12))=xm(eltseg(ielem,12))+xmt(10,ielem)
150  xm(eltseg(ielem,13))=xm(eltseg(ielem,13))+xmt(13,ielem)
151  xm(eltseg(ielem,14))=xm(eltseg(ielem,14))+xmt(15,ielem)
152  xm(eltseg(ielem,15))=xm(eltseg(ielem,15))+xmt(14,ielem)
153 !
154  ENDDO
155 !
156  ELSE
157  WRITE(lu,*) 'AS3_1313_S: UNKNOWN STORAGE OF XMT : ',stoxmt
158  CALL plante(1)
159  stop
160  ENDIF
161 !
162 !-----------------------------------------------------------------------
163 !
164  RETURN
165  END
subroutine as3_1313_s(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG)
Definition: as3_1313_s.f:7