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