The TELEMAC-MASCARET system  trunk
decldu.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE decldu
3 ! *****************
4 !
5  &(b,a,mesh,copy,lv)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief L D U FACTORISATION OF THE ELEMENTARY MATRICES
12 !+ IN MATRIX A.
13 !+
14 !+ REQUIRES THAT THE DIAGONAL OF A BE THE IDENTITY.
15 !code
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 !+ "DE" MATRICES ARE CONSIDERED LIKE DIAGONALS OF SIZE
28 !+ NPOIN X NPOIN, WHICH ARE FILLED WITH 1S FOR THE POINTS
29 !+ WHICH DO NOT BELONG TO THE CONSIDERED ELEMENT
30 !+
31 !+ THEN PERFORMS THE PRODUCT OF ALL THESE DIAGONALS
32 !+ YIELDING DIAGONAL DB
33 !+
34 !+ |||||| FINALLY: DB IS INVERTED BECAUSE THAT'S HOW IT WILL BE
35 !+ USED IN DESREM
36 !
37 !code
38 !+-----------------------------------------------------------------------
39 !+ MEANING OF IELM :
40 !+
41 !+ TYPE OF ELEMENT NUMBER OF POINTS CODED IN THIS SUBROUTINE
42 !+
43 !+ 11 : P1 TRIANGLE 3 YES
44 !+ 21 : Q1 QUADRILATERAL 4 YES
45 !+ 41 : TELEMAC-3D PRISMS 6 YES
46 !+
47 !+-----------------------------------------------------------------------
48 !
49 !history J-M HERVOUET (LNH)
50 !+ 26/02/04
51 !+ V5P5
52 !+
53 !
54 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
55 !+ 13/07/2010
56 !+ V6P0
57 !+ Translation of French comments within the FORTRAN sources into
58 !+ English comments
59 !
60 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
61 !+ 21/08/2010
62 !+ V6P0
63 !+ Creation of DOXYGEN tags for automated documentation and
64 !+ cross-referencing of the FORTRAN sources
65 !
66 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 !| A |<--| MATRIX A.
68 !| B |<--| MATRICE B, THE RESULT.
69 !| COPY |-->| IF .TRUE. A IS COPIED INTO B.
70 !| | | IF .FALSE. B IS CONSIDERED ALREADY INITIALISED
71 !| LV |-->| VECTOR LENGTH OF THE COMPUTER
72 !| MESH |-->| MESH STRUCTURE
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief, ex_decldu => decldu
76 !
78  IMPLICIT NONE
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  TYPE(bief_obj) , INTENT(INOUT) :: B
83  TYPE(bief_obj) , INTENT(IN) :: A
84  TYPE(bief_mesh), INTENT(INOUT) :: MESH
85  LOGICAL , INTENT(IN) :: COPY
86  INTEGER , INTENT(IN) :: LV
87 !
88 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
89 !
90  INTEGER NELMAX,IELM,NPOIN,NELEM
91 !
92  CHARACTER(LEN=1) TYPDA,TYPEA
93 !
94 !-----------------------------------------------------------------------
95 !
96  ielm = a%ELMLIN
97  nelem = mesh%NELEM
98  nelmax = mesh%NELMAX
99 !
100  typda = a%TYPDIA
101  typea = a%TYPEXT
102 !
103  npoin = a%D%DIM1
104 !
105 !-----------------------------------------------------------------------
106 !
107  IF(a%STO.EQ.1) THEN
108 !
109  IF(ielm.EQ.11) THEN
110 !
111  CALL dldu11(b%D%R,b%X%R,typda,a%X%R,typea,
112  & mesh%IKLE%I,nelem,nelmax,npoin,mesh%W%R,copy,lv)
113 !
114  ELSEIF(ielm.EQ.21.OR.ielm.EQ.12.OR.ielm.EQ.31.OR.ielm.EQ.51) THEN
115 !
116  CALL dldu21(b%D%R,b%X%R,typda,a%X%R,typea,
117  & mesh%IKLE%I,nelem,nelmax,npoin,mesh%W%R,copy,lv)
118 !
119  ELSEIF(ielm.EQ.41) THEN
120 !
121  CALL dldu41(b%D%R,b%X%R,typda,a%X%R,typea,
122  & mesh%IKLE%I,nelem,nelmax,npoin,mesh%W%R,copy,lv)
123 !
124 ! IELM NOT IMPLEMENTED: ERROR
125 !
126  ELSE
127  WRITE(lu,101) ielm
128 101 FORMAT(1x,'DECLDU (BIEF) : IELM = ',1i6,' ELEMENT NOT AVAILABLE')
129  CALL plante(1)
130  stop
131  ENDIF
132 !
133  ELSEIF(a%STO.EQ.3) THEN
134  CALL dlduseg(b%D%R,b%X%R,typda,a%X%R,typea,
135  & mesh%GLOSEG%I,mesh%NSEG,npoin,copy)
136  ELSE
137  WRITE(lu,*) 'UNKNOWN MATRIX STORAGE IN DECLDU'
138  CALL plante(1)
139  stop
140  ENDIF
141 !
142 !-----------------------------------------------------------------------
143 !
144 ! DESCRIPTION OF B
145 !
146  b%TYPDIA='Q'
147  b%TYPEXT=typea
148 !
149 !-----------------------------------------------------------------------
150 !
151  RETURN
152  END
subroutine dldu21(DB, XB, TYPDIA, XA, TYPEXA, IKLE, NELEM, NELMAX, NPOIN, W, COPY, LV)
Definition: dldu21.f:7
subroutine dldu41(DB, XB, TYPDIA, XA, TYPEXA, IKLE, NELEM, NELMAX, NPOIN, W, COPY, LV)
Definition: dldu41.f:8
subroutine dldu11(DB, XB, TYPDIA, XA, TYPEXA, IKLE, NELEM, NELMAX, NPOIN, W, COPY, LV)
Definition: dldu11.f:7
subroutine dlduseg(DB, XB, TYPDIA, XA, TYPEXA, GLOSEG, NSEG, NPOIN, COPY)
Definition: dlduseg.f:7
subroutine decldu(B, A, MESH, COPY, LV)
Definition: decldu.f:7
Definition: bief.f:3