The TELEMAC-MASCARET system  trunk
desseg.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE desseg
3 ! *****************
4 !
5  &(x, xa,typexa,b,gloseg,nseg,npoin,ditr,copy)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SOLVES THE SYSTEM L X = B (SEGMENT BY SEGMENT).
12 !code
13 !+ MATRIX L IS HERE THE RESULT OF THE FACTORISATION
14 !+ PERFORMED IN SUBROUTINE DECLDU.
15 !+
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 !history J-M HERVOUET (LNH)
28 !+ 25/02/04
29 !+ V5P5
30 !+
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 13/07/2010
34 !+ V6P0
35 !+ Translation of French comments within the FORTRAN sources into
36 !+ English comments
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 21/08/2010
40 !+ V6P0
41 !+ Creation of DOXYGEN tags for automated documentation and
42 !+ cross-referencing of the FORTRAN sources
43 !
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !| B |<--| RIGHT-HAND SIDE OF THE LINEAR SYSTEM TO BE SOLVED
46 !| COPY |-->| IF .TRUE. B IS COPIED INTO X TO START WITH
47 !| DITR |-->| CHARACTER, IF 'D' : DIRECT MATRIX A CONSIDERED
48 !| | | 'T' : TRANSPOSED MATRIX A CONSIDERED
49 !| GLOSEG |-->| GLOBAL NUMBERS OF POINTS OF SEGMENTS
50 !| NPOIN |-->| NUMBER OF POINTS
51 !| NSEG |-->| NUMBER OF SEGMENTS
52 !| TYPEXA |-->| TYPE OF OFF-DIAGONAL TERMS IN THE MATRIX
53 !| X |<--| SOLUTION OF THE SYSTEM AX = B
54 !| XA |<--| OFF-DIAGONAL TERMS OF THE MATRIX
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !
57  USE bief, ex_desseg => desseg
58 !
60  IMPLICIT NONE
61 !
62 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 !
64  INTEGER , INTENT(IN) :: NPOIN,NSEG
65  INTEGER , INTENT(IN) :: GLOSEG(nseg,2)
66  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin)
67  DOUBLE PRECISION, INTENT(IN) :: XA(nseg,*),B(npoin)
68  CHARACTER(LEN=1), INTENT(IN) :: TYPEXA,DITR
69  LOGICAL , INTENT(IN) :: COPY
70 !
71 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72 !
73  INTEGER I
74 !
75 !-----------------------------------------------------------------------
76 !
77 ! 1) INITIALISES : X = SECOND MEMBER
78 !
79  IF(copy) CALL ov('X=Y ', x=x, y=b, dim1=npoin)
80 !
81 !-----------------------------------------------------------------------
82 !
83 ! 2) INVERTS THE LOWER TRIANGULAR MATRICES (DESCENT)
84 !
85  IF(typexa(1:1).EQ.'S' .OR.
86  & (typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'T')) THEN
87 !
88  DO i=1,nseg
89  x(gloseg(i,2))=x(gloseg(i,2))-xa(i,1)*x(gloseg(i,1))
90  ENDDO
91 !
92  ELSEIF(typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'D') THEN
93 !
94  DO i=1,nseg
95  x(gloseg(i,2))=x(gloseg(i,2))-xa(i,2)*x(gloseg(i,1))
96  ENDDO
97 !
98  ELSE
99  WRITE(lu,*) 'DESSEG, CASE NOT IMPLEMENTED'
100  WRITE(lu,*) ' TYPEXA=',typexa,' DITR=',ditr(1:1)
101  CALL plante(1)
102  stop
103  ENDIF
104 !
105 !-----------------------------------------------------------------------
106 !
107  RETURN
108  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
Definition: bief.f:3