The TELEMAC-MASCARET system  trunk
des41.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE des41
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 SOLVES THE SYSTEM L X = B (ELEMENT: P1 PRISM).
16 !code
17 !+ B IS THE SAME AS X TO START WITH
18 !+
19 !+ L IS THE LOWER PART OF THE MATRIX, BUILT IN
20 !+ SUBROUTINE DECLDU.
21 !+
22 !+ EACH ELEMENTARY MATRIX IS DECOMPOSED IN THE FORM:
23 !+
24 !+ LE * DE * 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 PRISMS
52 !| IKLE2 |-->| GLOBAL NUMBER OF THE SECOND POINT OF PRISMS
53 !| IKLE3 |-->| GLOBAL NUMBER OF THE THIRD POINT OF PRISMS
54 !| IKLE4 |-->| GLOBAL NUMBER OF THE FOURTH POINT OF PRISMS
55 !| IKLE5 |-->| GLOBAL NUMBER OF THE FIFTH POINT OF PRISMS
56 !| IKLE6 |-->| GLOBAL NUMBER OF THE SIXTH POINT OF PRISMS
57 !| LV |-->| VECTOR LENGTH OF THE MACHINE
58 !| NELEM |-->| NUMBER OF ELEMENTS
59 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
60 !| NPOIN |-->| NUMBER OF POINTS
61 !| X |<->| AT THE BEGINNING : B
62 !| | | AT THE END : THE RESULT
63 !| XA1 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
64 !| XA2 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
65 !| XA3 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
66 !| XA4 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
67 !| XA5 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
68 !| XA6 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
69 !| XA7 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
70 !| XA8 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
71 !| XA9 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
72 !| XA10 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
73 !| XA11 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
74 !| XA12 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
75 !| XA13 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
76 !| XA14 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
77 !| XA15 |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
78 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79 !
81  IMPLICIT NONE
82 !
83 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
84 !
85  INTEGER , INTENT(IN) :: NPOIN,NELEM,NELMAX,LV
86  DOUBLE PRECISION , INTENT(INOUT) :: X(npoin)
87  DOUBLE PRECISION , INTENT(IN) :: XA1(nelmax)
88  DOUBLE PRECISION , INTENT(IN) :: XA2(nelmax)
89  DOUBLE PRECISION , INTENT(IN) :: XA3(nelmax)
90  DOUBLE PRECISION , INTENT(IN) :: XA4(nelmax)
91  DOUBLE PRECISION , INTENT(IN) :: XA5(nelmax)
92  DOUBLE PRECISION , INTENT(IN) :: XA6(nelmax)
93  DOUBLE PRECISION , INTENT(IN) :: XA7(nelmax)
94  DOUBLE PRECISION , INTENT(IN) :: XA8(nelmax)
95  DOUBLE PRECISION , INTENT(IN) :: XA9(nelmax)
96  DOUBLE PRECISION , INTENT(IN) :: XA10(nelmax)
97  DOUBLE PRECISION , INTENT(IN) :: XA11(nelmax)
98  DOUBLE PRECISION , INTENT(IN) :: XA12(nelmax)
99  DOUBLE PRECISION , INTENT(IN) :: XA13(nelmax)
100  DOUBLE PRECISION , INTENT(IN) :: XA14(nelmax)
101  DOUBLE PRECISION , INTENT(IN) :: XA15(nelmax)
102  INTEGER , INTENT(IN) :: IKLE1(nelmax)
103  INTEGER , INTENT(IN) :: IKLE2(nelmax)
104  INTEGER , INTENT(IN) :: IKLE3(nelmax)
105  INTEGER , INTENT(IN) :: IKLE4(nelmax)
106  INTEGER , INTENT(IN) :: IKLE5(nelmax)
107  INTEGER , INTENT(IN) :: IKLE6(nelmax)
108 !
109 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
110 !
111  INTEGER IELEM,IB
112 !
113  INTRINSIC min
114 !
115 !-----------------------------------------------------------------------
116 !
117 ! RESUMES INVERSIONS OF THE LOWER TRIANGULAR MATRICES
118 !
119 !-----------------------------------------------------------------------
120 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
121 !-----------------------------------------------------------------------
122 !
123  IF(lv.EQ.1) THEN
124 !
125 ! SCALAR MODE
126 !
127  DO ielem = 1 , nelem
128  x(ikle2(ielem))=x(ikle2(ielem))-xa1(ielem)*x(ikle1(ielem))
129  x(ikle3(ielem))=x(ikle3(ielem))-xa2(ielem)*x(ikle1(ielem))
130  & -xa6(ielem)*x(ikle2(ielem))
131  x(ikle4(ielem))=x(ikle4(ielem))-xa3(ielem)*x(ikle1(ielem))
132  & -xa7(ielem)*x(ikle2(ielem))
133  & -xa10(ielem)*x(ikle3(ielem))
134  x(ikle5(ielem))=x(ikle5(ielem))-xa4(ielem)*x(ikle1(ielem))
135  & -xa8(ielem)*x(ikle2(ielem))
136  & -xa11(ielem)*x(ikle3(ielem))
137  & -xa13(ielem)*x(ikle4(ielem))
138  x(ikle6(ielem))=x(ikle6(ielem))-xa5(ielem)*x(ikle1(ielem))
139  & -xa9(ielem)*x(ikle2(ielem))
140  & -xa12(ielem)*x(ikle3(ielem))
141  & -xa14(ielem)*x(ikle4(ielem))
142  & -xa15(ielem)*x(ikle5(ielem))
143  ENDDO ! IELEM
144 !
145  ELSE
146 !
147 ! VECTOR MODE
148 !
149  DO ib = 1,(nelem+lv-1)/lv
150 !VOCL LOOP,NOVREC
151 !DIR$ IVDEP
152  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
153  x(ikle2(ielem))=x(ikle2(ielem))-xa1(ielem)*x(ikle1(ielem))
154  x(ikle3(ielem))=x(ikle3(ielem))-xa2(ielem)*x(ikle1(ielem))
155  & -xa6(ielem)*x(ikle2(ielem))
156  x(ikle4(ielem))=x(ikle4(ielem))-xa3(ielem)*x(ikle1(ielem))
157  & -xa7(ielem)*x(ikle2(ielem))
158  & -xa10(ielem)*x(ikle3(ielem))
159  x(ikle5(ielem))=x(ikle5(ielem))-xa4(ielem)*x(ikle1(ielem))
160  & -xa8(ielem)*x(ikle2(ielem))
161  & -xa11(ielem)*x(ikle3(ielem))
162  & -xa13(ielem)*x(ikle4(ielem))
163  x(ikle6(ielem))=x(ikle6(ielem))-xa5(ielem)*x(ikle1(ielem))
164  & -xa9(ielem)*x(ikle2(ielem))
165  & -xa12(ielem)*x(ikle3(ielem))
166  & -xa14(ielem)*x(ikle4(ielem))
167  & -xa15(ielem)*x(ikle5(ielem))
168  ENDDO ! IELEM
169  ENDDO ! IB
170 !
171  ENDIF
172 !
173 !-----------------------------------------------------------------------
174 !
175  RETURN
176  END
subroutine des41(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: des41.f:11