The TELEMAC-MASCARET system  trunk
as3_8181_q.f
Go to the documentation of this file.
1 ! *********************
2  SUBROUTINE as3_8181_q
3 ! *********************
4 !
5  &(xm,nseg,xmt,dim1xmt,dim2xmt,stoxmt,
6  & nelmax,nelem,eltseg1,eltseg2,eltseg3,
7  & oriseg1,oriseg2,oriseg3)
8 !
9 !***********************************************************************
10 ! BIEF V6P2 21/08/2010
11 !***********************************************************************
12 !
13 !brief ASSEMBLES MATRICES EXTRA-DIAGONAL TERMS
14 !+ IN THE CASE OF EDGE-BASED STORAGE AND NON SYMMETRICAL
15 !+ MATRIX.
16 !+
17 !+ CASE OF TETRAHEDRON ELEMENT.
18 !+ SEE EBE STORAGE IN XMT FROM AAS IN MATRIY.f
19 !
20 !history F. DECUNG (LNHE)
21 !+ 20/07/2012
22 !+ V6P2
23 !+
24 !
25 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26 !| DIM1XMT |-->| FIRST DIMENSION OF XMT
27 !| DIM2XMT |-->| SECOND DIMENSION OF XMT
28 !| ELTSEG1 |-->| FIRST SEGMENT OF A TRIANGLE
29 !| ELTSEG2 |-->| SECOND SEGMENT OF A TRIANGLE
30 !| ELTSEG3 |-->| THIRD SEGMENT OF A TRIANGLE
31 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
32 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
33 !| NSEG |-->| NUMBER OF SEGMENTS
34 !| ORISEG1 |-->| ORIENTATION OF SEGMENT 1 OF TRIANGLE
35 !| ORISEG2 |-->| ORIENTATION OF SEGMENT 2 OF TRIANGLE
36 !| ORISEG3 |-->| ORIENTATION OF SEGMENT 3 OF TRIANGLE
37 !| STOXMT |-->| STORAGE MODE OF XMT
38 !| XM |<--| ASSEMBLED OFF-DIAGONAL TERMS XA12,23,31
39 !| XMT |-->| ELEMENT BY ELEMENT STORAGE OF MATRIX
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !
43  IMPLICIT NONE
44 !
45 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 !
47  INTEGER , INTENT(IN) :: NELMAX,NELEM,NSEG
48  INTEGER , INTENT(IN) :: DIM1XMT,DIM2XMT,STOXMT
49  INTEGER , INTENT(IN) :: ELTSEG1(nelmax),ELTSEG2(nelmax)
50  INTEGER , INTENT(IN) :: ELTSEG3(nelmax)
51  INTEGER , INTENT(IN) :: ORISEG1(nelmax),ORISEG2(nelmax)
52  INTEGER , INTENT(IN) :: ORISEG3(nelmax)
53  DOUBLE PRECISION, INTENT(INOUT) :: XMT(dim1xmt,dim2xmt)
54  DOUBLE PRECISION, INTENT(INOUT) :: XM(nseg*2)
55 !
56 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 !
58  INTEGER ISEG,IELEM
59 !
60 !-----------------------------------------------------------------------
61 !
62 ! INITIALISES
63 !
64  DO iseg = 1 , 2*nseg
65  xm(iseg) = 0.d0
66  ENDDO
67 !
68 !-----------------------------------------------------------------------
69 !
70  IF(stoxmt.EQ.1) THEN
71 !
72 ! ASSEMBLES
73 !
74  DO ielem = 1,nelem
75 ! TERM 12
76  xm(eltseg1(ielem)+nseg*(oriseg1(ielem)-1))
77  & = xm(eltseg1(ielem)+nseg*(oriseg1(ielem)-1)) + xmt(ielem,01)
78 ! TERM 23
79  xm(eltseg2(ielem)+nseg*(oriseg2(ielem)-1))
80  & = xm(eltseg2(ielem)+nseg*(oriseg2(ielem)-1)) + xmt(ielem,02)
81 ! TERM 31
82  xm(eltseg3(ielem)+nseg*(oriseg3(ielem)-1))
83  & = xm(eltseg3(ielem)+nseg*(oriseg3(ielem)-1)) + xmt(ielem,06)
84 ! TERM 21
85  xm(eltseg1(ielem)+nseg*(2-oriseg1(ielem)))
86  & = xm(eltseg1(ielem)+nseg*(2-oriseg1(ielem))) + xmt(ielem,04)
87 ! TERM 32
88  xm(eltseg2(ielem)+nseg*(2-oriseg2(ielem)))
89  & = xm(eltseg2(ielem)+nseg*(2-oriseg2(ielem))) + xmt(ielem,05)
90 ! TERM 13
91  xm(eltseg3(ielem)+nseg*(2-oriseg3(ielem)))
92  & = xm(eltseg3(ielem)+nseg*(2-oriseg3(ielem))) + xmt(ielem,03)
93  ENDDO
94 !
95 !-----------------------------------------------------------------------
96 !
97  ELSEIF(stoxmt.EQ.2) THEN
98 !
99  DO ielem = 1,nelem
100 ! TERM 12
101  xm(eltseg1(ielem)+nseg*(oriseg1(ielem)-1))
102  & = xm(eltseg1(ielem)+nseg*(oriseg1(ielem)-1)) + xmt(01,ielem)
103 ! TERM 23
104  xm(eltseg2(ielem)+nseg*(oriseg2(ielem)-1))
105  & = xm(eltseg2(ielem)+nseg*(oriseg2(ielem)-1)) + xmt(02,ielem)
106 ! TERM 31
107  xm(eltseg3(ielem)+nseg*(oriseg3(ielem)-1))
108  & = xm(eltseg3(ielem)+nseg*(oriseg3(ielem)-1)) + xmt(06,ielem)
109 ! TERM 21
110  xm(eltseg1(ielem)+nseg*(2-oriseg1(ielem)))
111  & = xm(eltseg1(ielem)+nseg*(2-oriseg1(ielem))) + xmt(04,ielem)
112 ! TERM 32
113  xm(eltseg2(ielem)+nseg*(2-oriseg2(ielem)))
114  & = xm(eltseg2(ielem)+nseg*(2-oriseg2(ielem))) + xmt(05,ielem)
115 ! TERM 13
116  xm(eltseg3(ielem)+nseg*(2-oriseg3(ielem)))
117  & = xm(eltseg3(ielem)+nseg*(2-oriseg3(ielem))) + xmt(03,ielem)
118  ENDDO
119 !
120 !-----------------------------------------------------------------------
121 !
122  ELSE
123  WRITE(lu,*) 'AS3_8181_Q: UNKNOWN STORAGE OF XMT : ',stoxmt
124  CALL plante(1)
125  stop
126  ENDIF
127 !
128 !-----------------------------------------------------------------------
129 !
130  RETURN
131  END
subroutine as3_8181_q(XM, NSEG, XMT, DIM1XMT, DIM2XMT, STOXMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_8181_q.f:9