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