The TELEMAC-MASCARET system  trunk
assve1.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE assve1
3 ! *****************
4 !
5  &(x, ikle,w, nelem,nelmax,lv,msk,maskel)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief ASSEMBLY LOOP FOR A VECTOR.
12 !
13 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
14 !+ 18/08/94
15 !+ V5P1
16 !+
17 !
18 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
19 !+ 13/07/2010
20 !+ V6P0
21 !+ Translation of French comments within the FORTRAN sources into
22 !+ English comments
23 !
24 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
25 !+ 21/08/2010
26 !+ V6P0
27 !+ Creation of DOXYGEN tags for automated documentation and
28 !+ cross-referencing of the FORTRAN sources
29 !
30 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 !| IKLE |-->| CONNECTIVITY TABLE
32 !| LV |-->| VECTOR LENGTH OF THE COMPUTER
33 !| MASKEL |-->| MASKING OF ELEMENTS
34 !| | | =1. : NORMAL =0. : MASKED ELEMENT
35 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS.
36 !| NELEM |-->| NUMBER OF ELEMENTS IN THE MESH
37 !| NELMAX |-->| FIRST DIMENSION OF IKLE AND W.
38 !| W |-->| WORK ARRAY WITH A NON ASSEMBLED FORM OF THE
39 !| | | RESULT
40 !| X |<->| ASSEMBLED VECTOR
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !
44  IMPLICIT NONE
45 !
46 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47 !
48  DOUBLE PRECISION, INTENT(INOUT) :: X(*)
49  INTEGER , INTENT(IN) :: NELEM,NELMAX,LV
50  INTEGER , INTENT(IN) :: IKLE(nelmax)
51  DOUBLE PRECISION, INTENT(IN) :: W(nelmax),MASKEL(*)
52  LOGICAL , INTENT(IN) :: MSK
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 ! WITH MASKING
65 !
66  IF(msk) THEN
67 !
68  IF(lv.EQ.1) THEN
69 !
70 ! SCALAR MODE
71 !
72  DO ielem = 1 , nelem
73  x(ikle(ielem)) = x(ikle(ielem)) + w(ielem) * maskel(ielem)
74  ENDDO ! IELEM
75 !
76  ELSE
77 !
78 ! VECTOR MODE
79 !
80  DO ib = 1,(nelem+lv-1)/lv
81 !VOCL LOOP,NOVREC
82 !DIR$ IVDEP
83  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
84  x(ikle(ielem)) = x(ikle(ielem)) + w(ielem) * maskel(ielem)
85  ENDDO ! IELEM
86  ENDDO ! IB
87 !
88  ENDIF
89 !
90 !-----------------------------------------------------------------------
91 !
92 ! WITHOUT MASKING
93 !
94  ELSE
95 !
96  IF(lv.EQ.1) THEN
97 !
98 ! SCALAR MODE
99 !
100  DO ielem = 1 , nelem
101  x(ikle(ielem)) = x(ikle(ielem)) + w(ielem)
102  ENDDO ! IELEM
103 !
104  ELSE
105 !
106 ! VECTOR MODE
107 !
108  DO ib = 1,(nelem+lv-1)/lv
109 !VOCL LOOP,NOVREC
110 !DIR$ IVDEP
111  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
112  x(ikle(ielem)) = x(ikle(ielem)) + w(ielem)
113  ENDDO ! IELEM
114  ENDDO ! IB
115 !
116  ENDIF
117 !
118  ENDIF
119 !
120 !-----------------------------------------------------------------------
121 !
122  RETURN
123  END
subroutine assve1(X, IKLE, W, NELEM, NELMAX, LV, MSK, MASKEL)
Definition: assve1.f:7