The TELEMAC-MASCARET system  trunk
remseg.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE remseg
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 U X = B (SEGMENT BY SEGMENT).
12 !code
13 !+ THE MATRIX U 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 !history J-M HERVOUET (LNH)
28 !+ 26/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 |-->| FIRST AND SECOND POINT OF SEGMENTS
50 !| NPOIN |-->| NUMBER OF POINTS
51 !| NSEG |-->| NUMBER OF SEGMENTS
52 !| TYPEXA |-->| TYPE OF OFF-DIAGONAL TERMS
53 !| | | TYPEXA = 'Q' : ANY VALUE
54 !| | | TYPEXA = 'S' : SYMMETRIC
55 !| | | TYPEXA = '0' : ZERO
56 !| X |<--| SOLUTION OF THE SYSTEM AX = B
57 !| XA |<--| OFF-DIAGONAL TERMS OF THE MATRIX
58 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59 !
60  USE bief, ex_remseg => remseg
61 !
63  IMPLICIT NONE
64 !
65 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 !
67  INTEGER , INTENT(IN) :: NPOIN,NSEG
68  INTEGER , INTENT(IN) :: GLOSEG(nseg,2)
69  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin)
70  DOUBLE PRECISION, INTENT(IN) :: XA(nseg,*),B(npoin)
71  CHARACTER(LEN=1), INTENT(IN) :: TYPEXA,DITR
72  LOGICAL , INTENT(IN) :: COPY
73 !
74 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75 !
76  INTEGER I
77 !
78 !-----------------------------------------------------------------------
79 !
80 ! 1) INITIALISES : X = SECOND MEMBER
81 !
82  IF(copy) CALL ov('X=Y ', x=x, y=b, dim1=npoin)
83 !
84 !-----------------------------------------------------------------------
85 !
86 ! 2) INVERTS THE UPPER TRIANGULAR MATRICES (TRACEBACK)
87 !
88  IF(typexa(1:1).EQ.'S' .OR.
89  & (typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'D')) THEN
90 !
91  DO i=nseg,1,-1
92  x(gloseg(i,1))=x(gloseg(i,1))-xa(i,1)*x(gloseg(i,2))
93  ENDDO
94 !
95  ELSEIF(typexa(1:1).EQ.'Q'.AND.ditr(1:1).EQ.'T') THEN
96 !
97  DO i=nseg,1,-1
98  x(gloseg(i,1))=x(gloseg(i,1))-xa(i,2)*x(gloseg(i,2))
99  ENDDO
100 !
101  ELSE
102  WRITE(lu,*) 'REMSEG, CASE NOT IMPLEMENTED'
103  WRITE(lu,*) ' TYPEXA=',typexa,' DITR=',ditr(1:1)
104  CALL plante(1)
105  stop
106  ENDIF
107 !
108 !-----------------------------------------------------------------------
109 !
110  RETURN
111  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine remseg(X, XA, TYPEXA, B, GLOSEG, NSEG, NPOIN, DITR, COPY)
Definition: remseg.f:7
Definition: bief.f:3