The TELEMAC-MASCARET system  trunk
vecle4.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vecle4
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_vecle4 => vecle4
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,4)
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  ENDDO ! IELEM
86 !
87 ! VECTOR MODE WITH FORCED VECTORISATION
88 ! (FUJITSU COMMANDS, THEN CRAY COMMANDS)
89 !
90  DO ib = 1,(nelem+lv-1)/lv
91 !VOCL LOOP,NOVREC
92 !DIR$ IVDEP
93  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
94  v(ikle(ielem,1)) = v(ikle(ielem,1)) - 1.d0
95  v(ikle(ielem,2)) = v(ikle(ielem,2)) - 1.d0
96  v(ikle(ielem,3)) = v(ikle(ielem,3)) - 1.d0
97  v(ikle(ielem,4)) = v(ikle(ielem,4)) - 1.d0
98  ENDDO ! IELEM
99  ENDDO ! IB
100 !
101 !-----------------------------------------------------------------------
102 !
103  IF(dot(npoin,v,v).GT.0.5d0.AND.lv.NE.1) THEN
104  lv = lv/2
105  IF(lv.LT.64) THEN
106  lv = 1
107  GO TO 1000
108  ENDIF
109  GO TO 5
110  ENDIF
111 !
112 1000 CONTINUE
113 !
114 !-----------------------------------------------------------------------
115 !
116  RETURN
117  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
double precision function dot(NPOIN, X, Y)
Definition: dot.f:7
subroutine vecle4(LV, IKLE, NELEM, NELMAX, NPOIN, V)
Definition: vecle4.f:7
Definition: bief.f:3