The TELEMAC-MASCARET system  trunk
as3_1112.f
Go to the documentation of this file.
1 ! *******************
2  SUBROUTINE as3_1112
3 ! *******************
4 !
5  &(xm,nseg11,nseg12,xmt,nelmax,nelem,eltseg1,eltseg2,eltseg3,
6  & eltseg4,eltseg5,eltseg6,
7  & oriseg1,oriseg2,oriseg3)
8 !
9 !***********************************************************************
10 ! BIEF V6P1 21/08/2010
11 !***********************************************************************
12 !
13 !brief ASSEMBLES MATRICES EXTRA-DIAGONAL TERMS
14 !+ IN THE CASE OF EDGE-BASED STORAGE.
15 !+
16 !+ CASE OF LINEAR-QUASIBUBBLE ELEMENT.
17 !code
18 !+ THE EXTRA-DIAGONAL TERMS OF THIS RECTANGULAR MATRIX ARE :
19 !+
20 !+ ... 1-2 1-3 1-4
21 !+ 2-1 ... 2-3 2-4
22 !+ 3-1 3-2 ... 3-4
23 !+
24 !+ AND ARE STORED LIKE A SQUARE LINEAR MATRIX + 3 TERMS
25 !+ WHICH GIVES 2*NSEG11 + (NSEG12-NSEG11) TERMS
26 !+ OR NSEG11 + NSEG12, HENCE THE DIMENSION OF XM
27 !
28 !history J-M HERVOUET (LNH)
29 !+ 29/12/05
30 !+ V5P6
31 !+
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 13/07/2010
35 !+ V6P0
36 !+ Translation of French comments within the FORTRAN sources into
37 !+ English comments
38 !
39 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
40 !+ 21/08/2010
41 !+ V6P0
42 !+ Creation of DOXYGEN tags for automated documentation and
43 !+ cross-referencing of the FORTRAN sources
44 !
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !| ELTSEG1 |-->| FIRST SEGMENT OF A TRIANGLE
47 !| ELTSEG2 |-->| SECOND SEGMENT OF A TRIANGLE
48 !| ELTSEG3 |-->| THIRD SEGMENT OF A TRIANGLE
49 !| ELTSEG4 |-->| FOURTH SEGMENT OF A QUASI-BUBBLE TRIANGLE
50 !| ELTSEG5 |-->| FIFTH SEGMENT OF A QUASI-BUBBLE TRIANGLE
51 !| ELTSEG6 |-->| SIXTH SEGMENT OF A QUASI-BUBBLE TRIANGLE
52 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
53 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
54 !| NSEG11 |-->| NUMBER OF SEGMENTS (HERE JOINING LINEAR POINTS)
55 !| NSEG12 |-->| NUMBER OF SEGMENTS (HERE QUASI-BUBBLE)
56 !| ORISEG1 |-->| ORIENTATION OF SEGMENT 1 OF TRIANGLE
57 !| ORISEG2 |-->| ORIENTATION OF SEGMENT 2 OF TRIANGLE
58 !| ORISEG3 |-->| ORIENTATION OF SEGMENT 3 OF TRIANGLE
59 !| XM |<--| ASSEMBLED OFF-DIAGONAL TERMS XA12,23,31
60 !| XMT |-->| ELEMENT BY ELEMENT STORAGE OF MATRIX
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !
64  IMPLICIT NONE
65 !
66 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 !
68  INTEGER , INTENT(IN) :: NELMAX,NELEM,NSEG11,NSEG12
69  INTEGER , INTENT(IN) :: ELTSEG1(nelmax)
70  INTEGER , INTENT(IN) :: ELTSEG2(nelmax)
71  INTEGER , INTENT(IN) :: ELTSEG3(nelmax)
72  INTEGER , INTENT(IN) :: ELTSEG4(nelmax)
73  INTEGER , INTENT(IN) :: ELTSEG5(nelmax)
74  INTEGER , INTENT(IN) :: ELTSEG6(nelmax)
75  INTEGER , INTENT(IN) :: ORISEG1(nelmax)
76  INTEGER , INTENT(IN) :: ORISEG2(nelmax)
77  INTEGER , INTENT(IN) :: ORISEG3(nelmax)
78  DOUBLE PRECISION, INTENT(IN) :: XMT(nelmax,*)
79  DOUBLE PRECISION, INTENT(INOUT) :: XM(nseg11+nseg12)
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83  INTEGER ISEG,IELEM
84 !
85 !-----------------------------------------------------------------------
86 !
87 ! INITIALISES
88 !
89  DO iseg = 1 , 2*nseg11
90  xm(iseg) = 0.d0
91  ENDDO
92 !
93 ! ASSEMBLES THE LINEAR PART (BETWEEN 1 AND 2*NSEG11)
94 !
95 ! THE SHIFT NSEG11*(...) PLACES THE TERM IN THE HIGHER OR LOWER
96 ! OFF-DIAGONAL TERMS, DEPENDING ON THE ORIENTATION OF THE SEGMENT
97 !
98  DO ielem = 1,nelem
99 ! TERM 12
100  xm(eltseg1(ielem)+nseg11*(oriseg1(ielem)-1))
101  & = xm(eltseg1(ielem)+nseg11*(oriseg1(ielem)-1)) + xmt(ielem,01)
102 ! TERM 23
103  xm(eltseg2(ielem)+nseg11*(oriseg2(ielem)-1))
104  & = xm(eltseg2(ielem)+nseg11*(oriseg2(ielem)-1)) + xmt(ielem,05)
105 ! TERM 31
106  xm(eltseg3(ielem)+nseg11*(oriseg3(ielem)-1))
107  & = xm(eltseg3(ielem)+nseg11*(oriseg3(ielem)-1)) + xmt(ielem,07)
108 ! TERM 21
109  xm(eltseg1(ielem)+nseg11*(2-oriseg1(ielem)))
110  & = xm(eltseg1(ielem)+nseg11*(2-oriseg1(ielem))) + xmt(ielem,04)
111 ! TERM 32
112  xm(eltseg2(ielem)+nseg11*(2-oriseg2(ielem)))
113  & = xm(eltseg2(ielem)+nseg11*(2-oriseg2(ielem))) + xmt(ielem,08)
114 ! TERM 13
115  xm(eltseg3(ielem)+nseg11*(2-oriseg3(ielem)))
116  & = xm(eltseg3(ielem)+nseg11*(2-oriseg3(ielem))) + xmt(ielem,02)
117  ENDDO
118 !
119 ! ASSEMBLES THE QUASI-BUBBLE PART
120 ! BETWEEN XM(2*NSEG11+1) AND XM(NSEG11+NSEG12)
121 ! SEE IN STOSEG HOW ELTSEG4,5,6 ARE BUILT
122 !
123  DO ielem = 1,nelem
124 ! TERM 14
125  xm(eltseg4(ielem)+nseg11) = xmt(ielem,03)
126 ! TERM 24
127  xm(eltseg5(ielem)+nseg11) = xmt(ielem,06)
128 ! TERM 34
129  xm(eltseg6(ielem)+nseg11) = xmt(ielem,09)
130  ENDDO
131 !
132 !-----------------------------------------------------------------------
133 !
134  RETURN
135  END
subroutine as3_1112(XM, NSEG11, NSEG12, XMT, NELMAX, NELEM, ELTSEG1, ELTSEG2, ELTSEG3, ELTSEG4, ELTSEG5, ELTSEG6, ORISEG1, ORISEG2, ORISEG3)
Definition: as3_1112.f:9