The TELEMAC-MASCARET system  trunk
dwnup1.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE dwnup1
3 ! *****************
4 !
5  &(x, a,b ,ditr,mesh)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SOLVES THE SYSTEM A X = B.
12 !+
13 !+ THE MATRIX A IS HERE THE RESULT OF A DECOMPOSITION
14 !+ DONE IN SUBROUTINE DECLDU.
15 !code
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 !+ "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 !+
35 !+ !!!!!!!!! FINALLY: DB HAS BEEN INVERTED BECAUSE THAT'S HOW
36 !+ IT IS USED IN THIS SUBROUTINE
37 !+
38 !+ MATRIX A IS HERE :
39 !+
40 !+ THE PRODUCT FROM 1 TO NELEM OF ALL THE MATRICES: LE
41 !+
42 !+ MULTIPLIED BY :
43 !+
44 !+ THE DIAGONAL: DB
45 !+
46 !+ MULTIPLIED BY :
47 !+
48 !+ THE PRODUCT FROM NELEM TO 1 OF ALL THE MATRICES: UE
49 !
50 !code
51 !+-----------------------------------------------------------------------
52 !+ MEANING OF IELM :
53 !+
54 !+ TYPE OF ELEMENT NUMBER OF POINTS CODED IN THIS SUBROUTINE
55 !+
56 !+ 11 : P1 TRIANGLE 3 YES
57 !+ 12 : QUASI-BUBBLE TRIANGLE 4 YES
58 !+ 21 : Q1 QUADRILATERAL 4 YES
59 !+ 41 : TELEMAC-3D PRISMS 6 YES
60 !+
61 !+-----------------------------------------------------------------------
62 !
63 !history J-M HERVOUET (LNH)
64 !+ 26/02/04
65 !+ V5P5
66 !+
67 !
68 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
69 !+ 13/07/2010
70 !+ V6P0
71 !+ Translation of French comments within the FORTRAN sources into
72 !+ English comments
73 !
74 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
75 !+ 21/08/2010
76 !+ V6P0
77 !+ Creation of DOXYGEN tags for automated documentation and
78 !+ cross-referencing of the FORTRAN sources
79 !
80 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81 !| A |-->| MATRIX A IN LDU FORM
82 !| B |<--| RIGHT-HAND SIDE OF THE SYSTEM
83 !| DITR |-->| OPTION 'D' : MATRIX A IS TAKEN
84 !| | | 'T' : MATRIX TRANSPOSED(A)
85 !| MESH |-->| MESH STRUCTURE
86 !| X |<--| SOLUTION OF SYSTEM AX = B
87 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
88 !
89  USE bief, ex_dwnup1 => dwnup1
90 !
92  IMPLICIT NONE
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  TYPE(bief_obj), INTENT(INOUT) :: X
97  TYPE(bief_obj), INTENT(IN) :: B
98  TYPE(bief_obj), INTENT(IN) :: A
99  TYPE(bief_mesh), INTENT(IN) :: MESH
100  CHARACTER(LEN=1), INTENT(IN) :: DITR
101 !
102 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
103 !
104  INTEGER IELM,NPOIN,NELEM,NELMAX
105 !
106  CHARACTER(LEN=1) TYPD,TYPX
107 !
108 !-----------------------------------------------------------------------
109 !
110  typd = a%TYPDIA
111  typx = a%TYPEXT
112  npoin = a%D%DIM1
113  ielm = a%ELMLIN
114  nelem = mesh%NELEM
115  nelmax= mesh%NELMAX
116  CALL cpstvc(b,x)
117 !
118 !-----------------------------------------------------------------------
119 !
120 ! 1) DESCENT WITH COPY OF B IN X
121 !
122  IF(a%STO.EQ.1) THEN
123  CALL descen(x%R, a%X%R,typx,b%R,
124  & mesh%IKLE%I,nelem,nelmax,npoin,ielm,ditr,.true.,mesh%LV)
125  ELSEIF(a%STO.EQ.3) THEN
126  CALL desseg(x%R, a%X%R,typx,b%R,
127  & mesh%GLOSEG%I,mesh%NSEG,npoin,ditr,.true.)
128  ENDIF
129 !
130 !-----------------------------------------------------------------------
131 !
132 ! 2) RESUMES INVERSIONS OF DIAGONAL MATRICES
133 !
134  IF(typd(1:1).NE.'I') THEN
135  CALL ov('X=XY ', x=x%R, y=a%D%R, dim1=npoin)
136  ENDIF
137 !
138 !-----------------------------------------------------------------------
139 !
140 ! 3) TRACES BACK WITHOUT PRELIMINARY COPY OF B IN X
141 !
142  IF(a%STO.EQ.1) THEN
143  CALL remont(x%R, a%X%R,typx,b%R,
144  & mesh%IKLE%I,nelem,nelmax,npoin,ielm,ditr,.false.,mesh%LV)
145  ELSE
146  CALL remseg(x%R, a%X%R,typx,b%R,
147  & mesh%GLOSEG%I,mesh%NSEG,npoin,ditr,.false.)
148  ENDIF
149 !
150 !-----------------------------------------------------------------------
151 !
152  RETURN
153  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine desseg(X, XA, TYPEXA, B, GLOSEG, NSEG, NPOIN, DITR, COPY)
Definition: desseg.f:7
subroutine remont(X, XA, TYPEXA, B, IKLE, NELEM, NELMAX, NPOIN, IELM, DITR, COPY, LV)
Definition: remont.f:7
subroutine descen(X, XA, TYPEXA, B, IKLE, NELEM, NELMAX, NPOIN, IELM, DITR, COPY, LV)
Definition: descen.f:7
subroutine remseg(X, XA, TYPEXA, B, GLOSEG, NSEG, NPOIN, DITR, COPY)
Definition: remseg.f:7
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine dwnup1(X, A, B, DITR, MESH)
Definition: dwnup1.f:7
Definition: bief.f:3