The TELEMAC-MASCARET system  trunk
descen.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE descen
3 ! *****************
4 !
5  &(x, xa,typexa,b,ikle,nelem,nelmax,npoin,ielm,ditr,copy,lv)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SOLVES THE SYSTEM L X = B (ELEMENT BY ELEMENT).
12 !code
13 !+ MATRIX L IS HERE THE RESULT OF THE FACTORISATION
14 !+ PERFORMED IN SUBROUTINE DECLDU.
15 !+
16 !+ EACH ELEMENTARY MATRIX IS DECOMPOSED IN THE FORM:
17 !+
18 !+ LE X DE X UE
19 !+
20 !+ LE : LOWER TRIANGULAR WITH 1S ON THE DIAGONAL
21 !+ DE : DIAGONAL
22 !+ UE : UPPER TRIANGULAR WITH 1S ON THE DIAGONAL
23 !+
24 !+ T
25 !+ IF THE MATRIX IS SYMMETRICAL : LE = UE
26 !
27 !code
28 !+-----------------------------------------------------------------------
29 !+ MEANING OF IELM :
30 !+
31 !+ TYPE OF ELEMENT NUMBER OF POINTS CODED IN THIS SUBROUTINE
32 !+
33 !+ 11 : P1 TRIANGLE 3 YES
34 !+ 12 : P2 TRIANGLE 6
35 !+ 13 : P1-ISO P1 TRIANGLE 6
36 !+ 14 : P2 TRIANGLE 7
37 !+ 21 : Q1 QUADRILATERAL 4 YES
38 !+ 22 : Q2 QUADRILATERAL 8
39 !+ 24 : Q2 QUADRILATERAL 9
40 !+ 31 : P1 TETRAHEDRON 4
41 !+ 32 : P2 TETRAHEDRON 10
42 !+ 41 : TELEMAC-3D PRISMS 6 YES
43 !+ 41 : PRISMS SPLIT IN TETRAHEDRONS 4 YES
44 !+
45 !+-----------------------------------------------------------------------
46 !
47 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
48 !+ 18/08/94
49 !+ V5P3
50 !+
51 !
52 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
53 !+ 13/07/2010
54 !+ V6P0
55 !+ Translation of French comments within the FORTRAN sources into
56 !+ English comments
57 !
58 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
59 !+ 21/08/2010
60 !+ V6P0
61 !+ Creation of DOXYGEN tags for automated documentation and
62 !+ cross-referencing of the FORTRAN sources
63 !
64 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
65 !| B |<--| RIGHT-HAND SIDE OF THE LINEAR SYSTEM TO BE SOLVED
66 !| COPY |-->| IF .TRUE. B IS COPIED INTO X TO START WITH
67 !| DITR |-->| CHARACTER, IF 'D' : DIRECT MATRIX A CONSIDERED
68 !| | | 'T' : TRANSPOSED MATRIX A CONSIDERED
69 !| IELM |-->| TYPE OF ELEMENT (SEE ABOVE)
70 !| IKLE |-->| CONNECTIVITY TABLE.
71 !| LV |-->| VECTOR LENGTH OF THE MACHINE
72 !| NELEM |-->| NUMBER OF ELEMENTS
73 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
74 !| NPOIN |-->| NUMBER OF POINTS
75 !| TYPEXA |-->| TYPE OF OFF-DIAGONAL TERMS IN THE MATRIX
76 !| X |<--| SOLUTION OF THE SYSTEM AX = B
77 !| XA |<--| OFF-DIAGONAL TERMS OF THE MATRIX
78 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79 !
80  USE bief, ex_descen => descen
81 !
83  IMPLICIT NONE
84 !
85 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
86 !
87  INTEGER , INTENT(IN) :: IELM,NPOIN,NELEM,NELMAX,LV
88  INTEGER , INTENT(IN) :: IKLE(nelmax,*)
89  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin)
90  DOUBLE PRECISION, INTENT(IN) :: XA(nelmax,*),B(npoin)
91  CHARACTER(LEN=1), INTENT(IN) :: TYPEXA,DITR
92  LOGICAL , INTENT(IN) :: COPY
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96 ! 1) INITIALISES : X = SECOND MEMBER
97 !
98  IF(copy) CALL ov('X=Y ', x=x, y=b, dim1=npoin)
99 !
100 !-----------------------------------------------------------------------
101 !
102 ! 2) INVERTS THE LOWER TRIANGULAR MATRICES (DESCENT)
103 !
104 ! 2.1) TRANSPOSE CASE
105 !
106  IF(typexa(1:1).EQ.'S' .OR.
107  & (typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'T')) THEN
108 !
109  IF(ielm.EQ.11) THEN
110 !
111  CALL des11(x,xa(1,1),xa(1,2),xa(1,3),
112  & ikle(1,1),ikle(1,2),ikle(1,3),nelem,nelmax,npoin,lv)
113 !
114  ELSEIF(ielm.EQ.21.OR.ielm.EQ.12.OR.ielm.EQ.31.OR.ielm.EQ.51) THEN
115 !
116  CALL des21(x,xa(1,1),xa(1,2),xa(1,3),xa(1,4),xa(1,5),xa(1,6),
117  & ikle(1,1),ikle(1,2),ikle(1,3),ikle(1,4),
118  & nelem,nelmax,npoin,lv)
119 !
120  ELSEIF(ielm.EQ.41) THEN
121 !
122  CALL des41(x,xa(1,1),xa(1,2),xa(1,3),xa(1,4),xa(1,5),xa(1,6),
123  & xa(1,7),xa(1,8),xa(1,9),xa(1,10),xa(1,11),xa(1,12),
124  & xa(1,13),xa(1,14),xa(1,15),
125  & ikle(1,1),ikle(1,2),ikle(1,3),
126  & ikle(1,4),ikle(1,5),ikle(1,6),nelem,nelmax,npoin,lv)
127 !
128 ! IELM NOT IMPLEMENTED: ERROR
129 !
130  ELSE
131 !
132  WRITE(lu,101) ielm
133 101 FORMAT(1x,'DESCEN (BIEF) : IELM = ',1i6,' ELEMENT NOT AVAILABLE')
134  CALL plante(1)
135  stop
136 !
137  ENDIF
138 !
139 ! 2.2) DIRECT CASE
140 !
141  ELSEIF(typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'D') THEN
142 !
143  IF(ielm.EQ.11) THEN
144 !
145  CALL des11(x,xa(1,4),xa(1,5),xa(1,6),
146  & ikle(1,1),ikle(1,2),ikle(1,3),nelem,nelmax,npoin,lv)
147 !
148  ELSEIF(ielm.EQ.21.OR.ielm.EQ.12.OR.ielm.EQ.31.OR.ielm.EQ.51) THEN
149 !
150  CALL des21(x,xa(1,7),xa(1,8),xa(1,9),xa(1,10),xa(1,11),xa(1,12),
151  & ikle(1,1),ikle(1,2),ikle(1,3),ikle(1,4),
152  & nelem,nelmax,npoin,lv)
153 !
154  ELSEIF(ielm.EQ.41) THEN
155 !
156  CALL des41(x,
157  & xa(1,16),xa(1,17),xa(1,18),xa(1,19),xa(1,20),xa(1,21),
158  & xa(1,22),xa(1,23),xa(1,24),xa(1,25),xa(1,26),xa(1,27),
159  & xa(1,28),xa(1,29),xa(1,30),
160  & ikle(1,1),ikle(1,2),ikle(1,3),
161  & ikle(1,4),ikle(1,5),ikle(1,6),nelem,nelmax,npoin,lv)
162 !
163 ! IELM NOT IMPLEMENTED: ERROR
164 !
165  ELSE
166 !
167  WRITE(lu,101) ielm
168  CALL plante(1)
169  stop
170 !
171  ENDIF
172 !
173 ! 2.3) CASE NOT IMPLEMENTED
174 !
175  ELSE
176  WRITE(lu,201) typexa(1:1),ditr(1:1)
177 201 FORMAT(1x,'DESCEN (BIEF) : UNEXPECTED TYPE OF MATRIX :',a1,/,
178  & 1x,'WITH DITR=',a1)
179  CALL plante(1)
180  stop
181  ENDIF
182 !
183 !-----------------------------------------------------------------------
184 !
185  RETURN
186  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine descen(X, XA, TYPEXA, B, IKLE, NELEM, NELMAX, NPOIN, IELM, DITR, COPY, LV)
Definition: descen.f:7
subroutine des11(X, XA1, XA2, XA3, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, NPOIN, LV)
Definition: des11.f:7
subroutine des41(X, XA1, XA2, XA3, XA4, XA5, XA6, XA7, XA8, XA9, XA10, XA11, XA12, XA13, XA14, XA15, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NELEM, NELMAX, NPOIN, LV)
Definition: des41.f:11
subroutine des21(X, XA1, XA2, XA3, XA4, XA5, XA6, IKLE1, IKLE2, IKLE3, IKLE4, NELEM, NELMAX, NPOIN, LV)
Definition: des21.f:8
Definition: bief.f:3