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