The TELEMAC-MASCARET system  trunk
vecle6.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vecle6
3 ! *****************
4 !
5  & (lv,ikle,nelem,nelmax,npoin,v)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief DETERMINES THE LENGTH OF A VECTOR WITHOUT BACK
12 !+ DEPENDENCIES FOR LOOPS ON THE ELEMENTS.
13 !+
14 !+ ONLY LOOKS FOR VALUES :
15 !+ 1 , 64 , 128 , 256 , 512 , 1024.
16 !+
17 !+ THE PRINCIPLE IS TO PERFORM, IN SCALAR AND VECTOR
18 !+ MODE, AN ALGORITHM WHICH COMPUTES THE NUMBER OF
19 !+ ADJACENT ELEMENTS AT EACH POINT.
20 !+
21 !+ ELEMENT CONSIDERED: QUADRILATERAL.
22 !
23 !warning IN VECTOR MODE WITH DEPENDENCIES, THE RESULT IS WRONG
24 !
25 !history J-M HERVOUET (LNH)
26 !+ 11/03/94
27 !+ V5P1
28 !+ ORIGINAL IDEA FROM J.-P. GREGOIRE
29 !
30 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
31 !+ 13/07/2010
32 !+ V6P0
33 !+ Translation of French comments within the FORTRAN sources into
34 !+ English comments
35 !
36 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
37 !+ 21/08/2010
38 !+ V6P0
39 !+ Creation of DOXYGEN tags for automated documentation and
40 !+ cross-referencing of the FORTRAN sources
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| IKLE |-->| CONNECTIVITY TABLE.
44 !| LV |-->| VECTOR LENGTH OF THE MACHINE
45 !| NELEM |-->| NUMBER OF ELEMENTS
46 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
47 !| NPOIN |-->| NUMBER OF POINTS
48 !| V |-->| ARRAY OF SIZE NPOIN
49 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 !
51  USE bief, ex_vecle6 => vecle6
52 !
54  IMPLICIT NONE
55 !
56 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 !
58  INTEGER, INTENT(INOUT) :: LV
59  INTEGER, INTENT(IN) :: NELEM,NELMAX,NPOIN
60  INTEGER, INTENT(IN) :: IKLE(nelmax,6)
61 !
62  DOUBLE PRECISION, INTENT(INOUT) :: V(npoin)
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER IELEM,IB
67 !
68 !-----------------------------------------------------------------------
69 !
70  lv = 1024
71 !
72 5 CONTINUE
73 !
74 ! INITIALISES V AT 0
75 !
76  CALL ov('X=C ', x=v, c=0.d0, dim1=npoin)
77 !
78 ! SCALAR MODE
79 !
80  DO ielem = 1 , nelem
81  v(ikle(ielem,1)) = v(ikle(ielem,1)) + 1.d0
82  v(ikle(ielem,2)) = v(ikle(ielem,2)) + 1.d0
83  v(ikle(ielem,3)) = v(ikle(ielem,3)) + 1.d0
84  v(ikle(ielem,4)) = v(ikle(ielem,4)) + 1.d0
85  v(ikle(ielem,5)) = v(ikle(ielem,5)) + 1.d0
86  v(ikle(ielem,6)) = v(ikle(ielem,6)) + 1.d0
87  ENDDO ! IELEM
88 !
89 ! VECTOR MODE WITH FORCED VECTORISATION
90 ! (FUJITSU COMMANDS, THEN CRAY COMMANDS)
91 !
92  DO ib = 1,(nelem+lv-1)/lv
93 !VOCL LOOP,NOVREC
94 !DIR$ IVDEP
95  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
96  v(ikle(ielem,1)) = v(ikle(ielem,1)) - 1.d0
97  v(ikle(ielem,2)) = v(ikle(ielem,2)) - 1.d0
98  v(ikle(ielem,3)) = v(ikle(ielem,3)) - 1.d0
99  v(ikle(ielem,4)) = v(ikle(ielem,4)) - 1.d0
100  v(ikle(ielem,5)) = v(ikle(ielem,5)) - 1.d0
101  v(ikle(ielem,6)) = v(ikle(ielem,6)) - 1.d0
102  ENDDO ! IELEM
103  ENDDO ! IB
104 !
105 !-----------------------------------------------------------------------
106 !
107  IF(dot(npoin,v,v).GT.0.5d0.AND.lv.NE.1) THEN
108  lv = lv/2
109  IF(lv.LT.64) THEN
110  lv = 1
111  GO TO 1000
112  ENDIF
113  GO TO 5
114  ENDIF
115 !
116 1000 CONTINUE
117 !
118 !-----------------------------------------------------------------------
119 !
120  RETURN
121  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine vecle6(LV, IKLE, NELEM, NELMAX, NPOIN, V)
Definition: vecle6.f:7
double precision function dot(NPOIN, X, Y)
Definition: dot.f:7
Definition: bief.f:3