The TELEMAC-MASCARET system  trunk
godown.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE godown
3 ! *****************
4 !
5  &(x, a,b ,ditr,mesh,copy)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SOLVES THE SYSTEM L X = B (ELEMENT BY ELEMENT).
12 !code
13 !+ THE MATRIX L IS HERE THE RESULT OF A DECOMPOSITION
14 !+ DONE IN SUBROUTINE DECLDU
15 !+
16 !+ EACH ELEMENTARY MATRIX WAS FACTORISED 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 : QUASI-BUBBLE TRIANGLE 4 YES
35 !+ 21 : Q1 QUADRILATERAL 4 YES
36 !+ 41 : TELEMAC-3D PRISMS 6 YES
37 !+
38 !+-----------------------------------------------------------------------
39 !
40 !history J-M HERVOUET (LNH)
41 !+ 23/12/94
42 !+ V5P1
43 !+
44 !
45 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
46 !+ 13/07/2010
47 !+ V6P0
48 !+ Translation of French comments within the FORTRAN sources into
49 !+ English comments
50 !
51 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
52 !+ 21/08/2010
53 !+ V6P0
54 !+ Creation of DOXYGEN tags for automated documentation and
55 !+ cross-referencing of the FORTRAN sources
56 !
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !| A |-->| MATRIX A IN LDU FORM
59 !| B |<--| RIGHT-HAND SIDE OF THE SYSTEM
60 !| COPY |-->| IF YES. B IS FIRST COPIED ON X.
61 !| DITR |-->| OPTION 'D' : MATRIX A IS TAKEN
62 !| | | 'T' : MATRIX TRANSPOSED(A)
63 !| MESH |-->| MESH STRUCTURE
64 !| X |<--| SOLUTION OF SYSTEM AX = B
65 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
66 !
67  USE bief, ex_godown => godown
68 !
70  IMPLICIT NONE
71 !
72 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 !
74  TYPE(bief_obj), INTENT(INOUT) :: X
75  TYPE(bief_obj), INTENT(IN) :: B,A
76  TYPE(bief_mesh), INTENT(IN) :: MESH
77  CHARACTER(LEN=1), INTENT(IN) :: DITR
78  LOGICAL, INTENT(IN) :: COPY
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER S,SA,I
83 !
84 !-----------------------------------------------------------------------
85 !
86  IF(x%TYPE.EQ.4) THEN
87  s = x%N
88  ELSE
89  s = 0
90  ENDIF
91 !
92 ! CASE WHERE THE SYSTEM IS A BLOCK BUT WHERE ONLY ONE
93 ! PRECONDITIONING MATRIX IS USED
94 !
95  IF(a%TYPE.EQ.3) THEN
96  sa = 0
97  ELSEIF(a%TYPE.EQ.4) THEN
98  sa = a%N
99  ELSE
100  WRITE(lu,400) a%TYPE
101 400 FORMAT(1x,'GODOWN (BIEF) :',1i6,' UNEXPECTED TYPE FOR A.')
102  CALL plante(0)
103  stop
104  ENDIF
105 !
106 !-----------------------------------------------------------------------
107 !
108  IF(s.EQ.0.AND.sa.EQ.0) THEN
109 !
110 ! CASE WHERE A IS A SIMPLE MATRIX AND X A SIMPLE VECTOR
111 !
112  CALL godwn1(x, a,b ,ditr,mesh,copy)
113 !
114  ELSEIF(s.GT.0.AND.s.EQ.sa) THEN
115 !
116 ! CASE WHERE BLOCK A ONLY HAS DIAGONALS
117 !
118  DO i=1,s
119  CALL godwn1(x%ADR(i)%P,
120  & a%ADR(i)%P,
121  & b%ADR(i)%P,
122  & ditr,mesh,copy)
123  ENDDO ! I
124 !
125  ELSEIF(s.GT.0.AND.s**2.EQ.sa) THEN
126 !
127 ! CASE WHERE BLOCK A HAS AS MANY MATRICES AS THE WHOLE SYSTEM :
128 ! ONLY CONSIDERS THE DIAGONALS
129 !
130  DO i=1,s
131  CALL godwn1(x%ADR(i)%P,
132  & a%ADR(1+(s+1)*(i-1))%P,
133  & b%ADR(i)%P,
134  & ditr,mesh,copy)
135  ENDDO ! I
136 !
137 ! CASE WHERE A IS A SINGLE MATRIX AND X A BLOCK
138 !
139  ELSEIF(s.GT.0.AND.sa.EQ.0) THEN
140 !
141  DO i=1,s
142  CALL godwn1(x%ADR(i)%P,
143  & a,
144  & b%ADR(i)%P,
145  & ditr,mesh,copy)
146  ENDDO ! I
147 !
148  ELSE
149  WRITE(lu,401)
150 401 FORMAT(1x,'GODOWN (BIEF) : UNEXPECTED CASE')
151  CALL plante(0)
152  stop
153  ENDIF
154 !
155 !-----------------------------------------------------------------------
156 !
157  RETURN
158  END
subroutine godwn1(X, A, B, DITR, MESH, COPY)
Definition: godwn1.f:7
subroutine godown(X, A, B, DITR, MESH, COPY)
Definition: godown.f:7
Definition: bief.f:3