The TELEMAC-MASCARET system  trunk
asmve1.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE asmve1
3 ! *****************
4 !
5  &(x, ikle,w, npoin,nelem,nelmax,lv)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief MULTIPLICATIVE ASSEMBLY LOOP FOR A VECTOR.
12 !+
13 !+ THIS FORM OF ASSEMBLY IS USED WITH PRECONDITIONINGS
14 !+ OF THE TYPE ELEMENTARY 'CROUT'.
15 !
16 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
17 !+ 17/08/94
18 !+ V5P1
19 !+
20 !
21 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
22 !+ 13/07/2010
23 !+ V6P0
24 !+ Translation of French comments within the FORTRAN sources into
25 !+ English comments
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 21/08/2010
29 !+ V6P0
30 !+ Creation of DOXYGEN tags for automated documentation and
31 !+ cross-referencing of the FORTRAN sources
32 !
33 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
34 !| IKLE |-->| CONNECTIVITY TABLE
35 !| LV |-->| VECTOR LENGTH OF THE COMPUTER
36 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
37 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
38 !| NPOIN |-->| NUMBER OF POINTS IN X
39 !| W |-->| WORK ARRAY WITH A NON ASSEMBLED FORM OF THE
40 !| | | RESULT
41 !| X |<->| ASSEMBLED VECTOR
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !
45  IMPLICIT NONE
46 !
47 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 !
49  INTEGER , INTENT(IN) :: NELEM,NELMAX,NPOIN,LV
50  DOUBLE PRECISION, INTENT(INOUT) :: X(npoin)
51  INTEGER , INTENT(IN) :: IKLE(nelmax)
52  DOUBLE PRECISION, INTENT(IN) :: W(nelmax)
53 !
54 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
55 !
56  INTEGER IELEM,IB
57 !
58  INTRINSIC min
59 !
60 !-----------------------------------------------------------------------
61 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
62 !-----------------------------------------------------------------------
63 !
64  IF(lv.EQ.1) THEN
65 !
66 ! SCALAR MODE
67 !
68  DO ielem = 1 , nelem
69  x(ikle(ielem)) = x(ikle(ielem)) * w(ielem)
70  ENDDO ! IELEM
71 !
72  ELSE
73 !
74 ! VECTOR MODE
75 !
76  DO ib = 1,(nelem+lv-1)/lv
77 !VOCL LOOP,NOVREC
78 !DIR$ IVDEP
79  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
80  x(ikle(ielem)) = x(ikle(ielem)) * w(ielem)
81  ENDDO ! IELEM
82  ENDDO ! IB
83 !
84  ENDIF
85 !
86 !-----------------------------------------------------------------------
87 !
88  RETURN
89  END
subroutine asmve1(X, IKLE, W, NPOIN, NELEM, NELMAX, LV)
Definition: asmve1.f:7