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