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