The TELEMAC-MASCARET system  trunk
prebdt.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE prebdt
3 ! *****************
4 !
5  &(x,a,b,d,mesh,prexsm,diadon,s)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief BLOCK-DIAGONAL PRECONDITIONING OF A SYSTEM A X = B
12 !+ (CAN BE MADE OF 4-MATRIX OR 9-MATRIX BLOCKS).
13 !code
14 !+ EXAMPLE FOR A BLOCK OF 4 :
15 !+
16 !+ ( A11 A12 ) ( X1 ) = ( B1 )
17 !+ ( ) ( ) ( )
18 !+ ( ) ( ) ( )
19 !+ ( A21 A22 ) ( X2 ) = ( B2 )
20 !
21 !history J.M. HERVOUET (LNH)
22 !+ 23/12/94
23 !+ V5P1
24 !+
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 13/07/2010
28 !+ V6P0
29 !+ Translation of French comments within the FORTRAN sources into
30 !+ English comments
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 21/08/2010
34 !+ V6P0
35 !+ Creation of DOXYGEN tags for automated documentation and
36 !+ cross-referencing of the FORTRAN sources
37 !
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !| A |-->| BLOCK OF MATRICES
40 !| B |-->| BLOCK OF RIGHT-HAND SIZES
41 !| D |<--| BLOCK OF DIAGONALS
42 !| DIADON |-->| .TRUE. : DIAGONALS ARE GIVEN
43 !| MESH |-->| MESH STRUCTURE
44 !| PREXSM |-->| .TRUE. : PRECONDITIONING X1,X2 AND B1,B2
45 !| S |-->| 0 : A NORMAL SYSTEM (FORBIDDEN HERE)
46 !| | | 1 : BLOCK OF ONE MATRIX (FORBIDDEN HERE)
47 !| | | 2 : BLOCK OF 4 MATRICES
48 !| | | 3 : BLOCK OF 9 MATRICES
49 !| X |<->| BLOCK OF UNKNOWN VECTORS
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !
52  USE bief, ex_prebdt => prebdt
53 !
55  IMPLICIT NONE
56 !
57 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 !
59  INTEGER, INTENT(IN) :: S
60 !
61  LOGICAL, INTENT(IN) :: PREXSM,DIADON
62 !
63 !-----------------------------------------------------------------------
64 !
65 ! VECTOR OR VECTOR BLOCK STRUCTURES
66 !
67  TYPE(bief_obj), INTENT(INOUT) :: X,B,D
68 !
69 !-----------------------------------------------------------------------
70 !
71 ! MATRIX OR MATRIX BLOCK STRUCTURES
72 !
73  TYPE(bief_obj), INTENT(INOUT) :: A
74 !
75 !-----------------------------------------------------------------------
76 !
77 ! MESH STRUCTURE
78 !
79  TYPE(bief_mesh), INTENT(INOUT) :: MESH
80 !
81 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
82 !
83 ! 4-MATRIX BLOCK:
84 !
85  IF(s.EQ.2) THEN
86 !
87 ! 4-MATRIX BLOCK:
88 !
89  CALL prebd4(x%ADR(1)%P,x%ADR(2)%P,
90  & a%ADR(1)%P,a%ADR(2)%P,a%ADR(3)%P,a%ADR(4)%P,
91  & b%ADR(1)%P,b%ADR(2)%P,
92  & d%ADR(1)%P,d%ADR(2)%P,d%ADR(3)%P,d%ADR(4)%P,
93  & mesh,prexsm,diadon)
94 !
95  ELSEIF(s.EQ.3) THEN
96 !
97 ! 9-MATRIX BLOCK:
98 !
99  CALL prebd9(x%ADR(1)%P,x%ADR(2)%P,x%ADR(3)%P,
100  & a%ADR(1)%P,a%ADR(2)%P,a%ADR(3)%P,
101  & a%ADR(4)%P,a%ADR(5)%P,a%ADR(6)%P,
102  & a%ADR(7)%P,a%ADR(8)%P,a%ADR(9)%P,
103  & b%ADR(1)%P,b%ADR(2)%P,b%ADR(3)%P,
104  & d%ADR(1)%P,d%ADR(2)%P,d%ADR(3)%P,
105  & d%ADR(4)%P,d%ADR(5)%P,d%ADR(6)%P,
106  & d%ADR(7)%P,d%ADR(8)%P,d%ADR(9)%P,
107  & mesh,prexsm,diadon)
108 !
109  ELSE
110 !
111 !-----------------------------------------------------------------------
112 !
113 ! ERROR
114 !
115  WRITE(lu,200) s
116 200 FORMAT(1x,'PREBDT (BIEF) : UNEXPECTED S :',1i6)
117  CALL plante(1)
118  stop
119 !
120  ENDIF
121 !
122 !-----------------------------------------------------------------------
123 ! -1
124  RETURN
125  END
subroutine prebd9(X1, X2, X3, A11, A12, A13, A21, A22, A23, A31, A32, A33, B1, B2, B3, D11, D12, D13, D21, D22, D23, D31, D32, D33, MESH, PREXSM, DIADON)
Definition: prebd9.f:9
subroutine prebd4(X1, X2, A11, A12, A21, A22, B1, B2, D11, D12, D21, D22, MESH, PREXSM, DIADON)
Definition: prebd4.f:8
subroutine prebdt(X, A, B, D, MESH, PREXSM, DIADON, S)
Definition: prebdt.f:7
Definition: bief.f:3