The TELEMAC-MASCARET system  trunk
gsebe.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE gsebe
3 ! ****************
4 !
5  &(b,a,mesh)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief FACTORISES THE ELEMENTARY MATRICES IN MATRIX A
12 !+ USING THE GAUSS-SEIDEL EBE METHOD.
13 !+
14 !+ (A CAN ALSO BE A BLOCK OF MATRICES; IN THIS CASE ALL
15 !+ THE MATRICES IN THE BLOCK ARE TREATED).
16 !
17 !warning REQUIRES THAT THE DIAGONAL OF A BE THE IDENTITY
18 !
19 !history J-M HERVOUET (LNH)
20 !+ 23/12/94
21 !+ V5P1
22 !+
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 13/07/2010
26 !+ V6P0
27 !+ Translation of French comments within the FORTRAN sources into
28 !+ English comments
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 21/08/2010
32 !+ V6P0
33 !+ Creation of DOXYGEN tags for automated documentation and
34 !+ cross-referencing of the FORTRAN sources
35 !
36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 !| A |<--| MATRIX A.
38 !| B |<--| RESULTING MATRIX.
39 !| MESH |-->| MESH STRUCTURE.
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !
42  USE bief, ex_gsebe => gsebe
43 !
45  IMPLICIT NONE
46 !
47 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 !
49  TYPE(bief_obj), INTENT(IN) :: A
50  TYPE(bief_obj), INTENT(INOUT) :: B
51  TYPE(bief_mesh), INTENT(IN) :: MESH
52 !
53 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 !
55  INTEGER SA,SB,I
56 !
57 !-----------------------------------------------------------------------
58 !
59  IF(a%TYPE.EQ.3) THEN
60  sa = 0
61  ELSEIF(a%TYPE.EQ.4) THEN
62  sa = a%N
63  ELSE
64  WRITE(lu,400) a%TYPE
65 400 FORMAT(1x,'GSEBE (BIEF) :',1i6,' UNEXPECTED TYPE FOR A.')
66  CALL plante(1)
67  stop
68  ENDIF
69 !
70  IF(b%TYPE.EQ.3) THEN
71  sb = 0
72  ELSEIF(b%TYPE.EQ.4) THEN
73  sb = b%N
74  ELSE
75  WRITE(lu,401) b%TYPE
76 401 FORMAT(1x,'GSEBE (BIEF) :',1i6,' UNEXPECTED TYPE FOR B.')
77  CALL plante(1)
78  stop
79  ENDIF
80 !
81 !-----------------------------------------------------------------------
82 !
83  IF(sa.EQ.0.AND.sb.EQ.0) THEN
84 !
85 ! B%D IS HERE A STRUCTURE OF VECTOR
86 ! USED AS DUMMY DIAGONAL
87  CALL om('M=N ', m=b, n=a, mesh=mesh)
88  b%TYPDIA='I'
89 !
90  ELSEIF(sa.GT.0.AND.sb.GT.0) THEN
91 !
92 ! TAKES THE DIAGONALS OF BLOCK A
93 !
94  DO i=1,sb
95  CALL om('M=N ', m=b%ADR(i)%P, n=a%ADR(1+(sb+1)*(i-1))%P,
96  & mesh=mesh)
97  b%ADR(i)%P%TYPDIA='I'
98  ENDDO ! I
99 !
100  ELSEIF(sa.NE.0.AND.sb.EQ.0) THEN
101 !
102 ! TAKES THE 1ST DIAGONAL OF BLOCK A
103 !
104  CALL om('M=N ', m=b, n=a%ADR(1)%P, mesh=mesh)
105  b%TYPDIA='I'
106 !
107  ELSE
108 !
109  WRITE(lu,402)
110 402 FORMAT(1x,'GSEBE (BIEF) : UNEXPECTED CASE')
111  CALL plante(1)
112  stop
113 !
114  ENDIF
115 !
116 !-----------------------------------------------------------------------
117 !
118  RETURN
119  END
subroutine om(OP, M, N, D, C, MESH)
Definition: om.f:7
subroutine gsebe(B, A, MESH)
Definition: gsebe.f:7
Definition: bief.f:3