The TELEMAC-MASCARET system  trunk
as3_4141_s.f
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE as3_4141_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 LINEAR-LINEAR PRISM
15 !+ AND SYMMETRICAL MATRIX.
16 !code
17 !+ LOCAL NUMBERING OF SEGMENTS CHOSEN HERE IN A PRISM
18 !+
19 !+ 01 : POINT 1 TO 2
20 !+ 02 : POINT 2 TO 3
21 !+ 03 : POINT 3 TO 1
22 !+ 04 : POINT 4 TO 5
23 !+ 05 : POINT 5 TO 6
24 !+ 06 : POINT 6 TO 4
25 !+ 07 : POINT 1 TO 4
26 !+ 08 : POINT 2 TO 5
27 !+ 09 : POINT 3 TO 6
28 !+ 10 : POINT 1 TO 5
29 !+ 11 : POINT 2 TO 4
30 !+ 12 : POINT 2 TO 6
31 !+ 13 : POINT 3 TO 5
32 !+ 14 : POINT 3 TO 4
33 !+ 15 : POINT 1 TO 6
34 !+
35 !+ LOCAL NUMBERING OF ELEMENT BY ELEMENT EXTRA-DIAGONAL TERMS
36 !+
37 !+ 01 : POINTS 1-2
38 !+ 02 : POINTS 1-3
39 !+ 03 : POINTS 1-4
40 !+ 04 : POINTS 1-5
41 !+ 05 : POINTS 1-6
42 !+ 06 : POINTS 2-3
43 !+ 07 : POINTS 2-4
44 !+ 08 : POINTS 2-5
45 !+ 09 : POINTS 2-6
46 !+ 10 : POINTS 3-4
47 !+ 11 : POINTS 3-5
48 !+ 12 : POINTS 3-6
49 !+ 13 : POINTS 4-5
50 !+ 14 : POINTS 4-6
51 !+ 15 : POINTS 5-6
52 !
53 !history J-M HERVOUET (LNHE)
54 !+ 11/08/09
55 !+
56 !+ CROSSED AND VERTICAL SEGMENTS SWAPPED (SEE STOSEG41)
57 !
58 !history JMH
59 !+ 14/10/09
60 !+ V6P0
61 !+ DIM1XMT,DIM2XMT,STOXMT ADDED, + CASE STOXMT=2
62 !
63 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
64 !+ 13/07/2010
65 !+ V6P0
66 !+ Translation of French comments within the FORTRAN sources into
67 !+ English comments
68 !
69 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
70 !+ 21/08/2010
71 !+ V6P0
72 !+ Creation of DOXYGEN tags for automated documentation and
73 !+ cross-referencing of the FORTRAN sources
74 !
75 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76 !| DIM1XMT |-->| FIRST DIMENSION OF XMT
77 !| DIM2XMT |-->| SECOND DIMENSION OF XMT
78 !| ELTSEG |-->| SEGMENTS OF A TRIANGLE
79 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
80 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
81 !| NSEG1 |-->| NUMBER OF SEGMENTS
82 !| ORISEG |-->| ORIENTATION OF SEGMENTS
83 !| STOXMT |-->| STORAGE OF XMT 1: (NELMAX,*)
84 !| | | 2: (*,NELMAX)
85 !| XM |<--| ASSEMBLED OFF-DIAGONAL TERMS XA12,23,31
86 !| XMT |-->| ELEMENT BY ELEMENT STORAGE OF MATRIX
87 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88 !
89  USE bief, ex_as3_4141_s => as3_4141_s
90 !
92  IMPLICIT NONE
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  INTEGER , INTENT(IN) :: NELMAX,NELEM,NSEG1
97  INTEGER , INTENT(IN) :: DIM1XMT,DIM2XMT,STOXMT
98  INTEGER , INTENT(IN) :: ELTSEG(nelmax,15)
99  DOUBLE PRECISION, INTENT(IN) :: XMT(dim1xmt,dim2xmt)
100  DOUBLE PRECISION, INTENT(INOUT) :: XM(nseg1)
101 !
102 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
103 !
104  INTEGER ISEG,IELEM
105 !
106 !-----------------------------------------------------------------------
107 !
108 ! INITIALISES
109 !
110  DO iseg = 1 , nseg1
111  xm(iseg) = 0.d0
112  ENDDO
113 !
114 !-----------------------------------------------------------------------
115 !
116 ! ASSEMBLES
117 !
118 !-----------------------------------------------------------------------
119 !
120  IF(stoxmt.EQ.1) THEN
121 !
122  DO ielem = 1,nelem
123  xm(eltseg(ielem,01)) = xm(eltseg(ielem,01)) + xmt(ielem,01)
124  xm(eltseg(ielem,02)) = xm(eltseg(ielem,02)) + xmt(ielem,06)
125  xm(eltseg(ielem,03)) = xm(eltseg(ielem,03)) + xmt(ielem,02)
126  xm(eltseg(ielem,04)) = xm(eltseg(ielem,04)) + xmt(ielem,13)
127  xm(eltseg(ielem,05)) = xm(eltseg(ielem,05)) + xmt(ielem,15)
128  xm(eltseg(ielem,06)) = xm(eltseg(ielem,06)) + xmt(ielem,14)
129  xm(eltseg(ielem,07)) = xm(eltseg(ielem,07)) + xmt(ielem,03)
130  xm(eltseg(ielem,08)) = xm(eltseg(ielem,08)) + xmt(ielem,08)
131  xm(eltseg(ielem,09)) = xm(eltseg(ielem,09)) + xmt(ielem,12)
132  xm(eltseg(ielem,10)) = xm(eltseg(ielem,10)) + xmt(ielem,04)
133  xm(eltseg(ielem,11)) = xm(eltseg(ielem,11)) + xmt(ielem,07)
134  xm(eltseg(ielem,12)) = xm(eltseg(ielem,12)) + xmt(ielem,09)
135  xm(eltseg(ielem,13)) = xm(eltseg(ielem,13)) + xmt(ielem,11)
136  xm(eltseg(ielem,14)) = xm(eltseg(ielem,14)) + xmt(ielem,10)
137  xm(eltseg(ielem,15)) = xm(eltseg(ielem,15)) + xmt(ielem,05)
138  ENDDO
139 !
140  ELSEIF(stoxmt.EQ.2) THEN
141 !
142  DO ielem = 1,nelem
143  xm(eltseg(ielem,01)) = xm(eltseg(ielem,01)) + xmt(01,ielem)
144  xm(eltseg(ielem,02)) = xm(eltseg(ielem,02)) + xmt(06,ielem)
145  xm(eltseg(ielem,03)) = xm(eltseg(ielem,03)) + xmt(02,ielem)
146  xm(eltseg(ielem,04)) = xm(eltseg(ielem,04)) + xmt(13,ielem)
147  xm(eltseg(ielem,05)) = xm(eltseg(ielem,05)) + xmt(15,ielem)
148  xm(eltseg(ielem,06)) = xm(eltseg(ielem,06)) + xmt(14,ielem)
149  xm(eltseg(ielem,07)) = xm(eltseg(ielem,07)) + xmt(03,ielem)
150  xm(eltseg(ielem,08)) = xm(eltseg(ielem,08)) + xmt(08,ielem)
151  xm(eltseg(ielem,09)) = xm(eltseg(ielem,09)) + xmt(12,ielem)
152  xm(eltseg(ielem,10)) = xm(eltseg(ielem,10)) + xmt(04,ielem)
153  xm(eltseg(ielem,11)) = xm(eltseg(ielem,11)) + xmt(07,ielem)
154  xm(eltseg(ielem,12)) = xm(eltseg(ielem,12)) + xmt(09,ielem)
155  xm(eltseg(ielem,13)) = xm(eltseg(ielem,13)) + xmt(11,ielem)
156  xm(eltseg(ielem,14)) = xm(eltseg(ielem,14)) + xmt(10,ielem)
157  xm(eltseg(ielem,15)) = xm(eltseg(ielem,15)) + xmt(05,ielem)
158  ENDDO
159 !
160  ELSE
161  WRITE(lu,*) 'AS3_4141_S: UNKNOWN STORAGE OF XMT : ',stoxmt
162  CALL plante(1)
163  stop
164  ENDIF
165 !
166 !-----------------------------------------------------------------------
167 !
168  RETURN
169  END
subroutine as3_4141_s(XM, NSEG1, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG)
Definition: as3_4141_s.f:7
Definition: bief.f:3