The TELEMAC-MASCARET system  trunk
rem11.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE rem11
3 ! ****************
4 !
5  &(x, xa1,xa2,xa3,ikle1,ikle2,ikle3,nelem,nelmax,npoin,lv)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief SOLVES THE SYSTEM U X = B (ELEMENT P1 TRIANGLE)
12 !+ B BEING THE SAME AS X TO START WITH.
13 !code
14 !+ U IS HERE THE UPPER PART OF MATRIX A BUILT IN
15 !+ SUBROUTINE DECLDU.
16 !+
17 !+ EACH ELEMENTARY MATRIX WAS FACTORISED IN THE FORM:
18 !+
19 !+ LE X DE X UE
20 !+
21 !+ LE : LOWER TRIANGULAR WITH 1S ON THE DIAGONAL
22 !+ DE : DIAGONAL
23 !+ UE : UPPER TRIANGULAR WITH 1S ON THE DIAGONAL
24 !+
25 !+ T
26 !+ IF THE MATRIX IS SYMMETRICAL : LE = UE
27 !
28 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
29 !+ 05/02/91
30 !+ V5P1
31 !+
32 !
33 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
34 !+ 13/07/2010
35 !+ V6P0
36 !+ Translation of French comments within the FORTRAN sources into
37 !+ English comments
38 !
39 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
40 !+ 21/08/2010
41 !+ V6P0
42 !+ Creation of DOXYGEN tags for automated documentation and
43 !+ cross-referencing of the FORTRAN sources
44 !
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !| IKLE1 |-->| GLOBAL NUMBER OF THE FIRST POINT OF TRIANGLES
47 !| IKLE2 |-->| GLOBAL NUMBER OF THE SECOND POINT OF TRIANGLES
48 !| IKLE3 |-->| GLOBAL NUMBER OF THE THIRD POINT OF TRIANGLES
49 !| LV |-->| VECTOR LENGTH OF THE MACHINE
50 !| NELEM |-->| NUMBER OF ELEMENTS
51 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
52 !| NPOIN |-->| NUMBER OF POINTS
53 !| X |<->| AT THE BEGINNING : B
54 !| | | AT THE END : THE RESULT
55 !| XA1 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
56 !| XA2 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
57 !| XA3 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
58 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
59 !
61  IMPLICIT NONE
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  INTEGER, INTENT(IN) :: NPOIN,NELEM,NELMAX,LV
66  INTEGER, INTENT(IN) :: IKLE1(nelmax),IKLE2(nelmax),IKLE3(nelmax)
67 !
68  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin)
69  DOUBLE PRECISION, INTENT(IN) :: XA1(nelmax)
70  DOUBLE PRECISION, INTENT(IN) :: XA2(nelmax)
71  DOUBLE PRECISION, INTENT(IN) :: XA3(nelmax)
72 !
73 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
74 !
75  INTEGER IELEM,IB
76  INTRINSIC min
77 !
78 !-----------------------------------------------------------------------
79 !
80 ! RESUMES INVERSIONS OF THE LOWER TRIANGULAR MATRICES
81 !
82 !-----------------------------------------------------------------------
83 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
84 !-----------------------------------------------------------------------
85 !
86  IF(lv.EQ.1) THEN
87 !
88 ! SCALAR MODE
89 !
90  DO ielem = nelem , 1 , -1
91  x(ikle2(ielem))=x(ikle2(ielem))-xa3(ielem)*x(ikle3(ielem))
92  x(ikle1(ielem))=x(ikle1(ielem))-xa1(ielem)*x(ikle2(ielem))
93  & -xa2(ielem)*x(ikle3(ielem))
94  ENDDO ! IELEM
95 !
96  ELSE
97 !
98 ! VECTOR MODE
99 !
100  DO ib = (nelem+lv-1)/lv , 1 , -1
101 !VOCL LOOP,NOVREC
102 !DIR$ IVDEP
103  DO ielem = min(nelem,ib*lv) , 1+(ib-1)*lv , -1
104  x(ikle2(ielem))=x(ikle2(ielem))-xa3(ielem)*x(ikle3(ielem))
105  x(ikle1(ielem))=x(ikle1(ielem))-xa1(ielem)*x(ikle2(ielem))
106  & -xa2(ielem)*x(ikle3(ielem))
107  ENDDO ! IELEM
108  ENDDO ! IB
109 !
110  ENDIF
111 !
112 !----------------------------------------------------------------------
113 !
114  RETURN
115  END
subroutine rem11(X, XA1, XA2, XA3, IKLE1, IKLE2, IKLE3, NELEM, NELMAX, NPOIN, LV)
Definition: rem11.f:7