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