The TELEMAC-MASCARET system  trunk
vecle3.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE vecle3
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: TRIANGLE.
22 !
23 !warning IN VECTOR MODE WITH DEPENDENCIES, THE RESULT IS WRONG
24 !
25 !history J-M HERVOUET (LNH)
26 !+ 19/08/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_vecle3 => vecle3
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,3)
61  DOUBLE PRECISION, INTENT(INOUT) :: V(npoin)
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  INTEGER IELEM,IB
66 !
67 !-----------------------------------------------------------------------
68 !
69  lv = 1024
70 !
71 5 CONTINUE
72 !
73 ! INITIALISES V AT 0
74 !
75  CALL ov('X=C ', x=v, c=0.d0, dim1=npoin)
76 !
77 ! SCALAR MODE
78 !
79  DO ielem = 1 , nelem
80  v(ikle(ielem,1)) = v(ikle(ielem,1)) + 1.d0
81  v(ikle(ielem,2)) = v(ikle(ielem,2)) + 1.d0
82  v(ikle(ielem,3)) = v(ikle(ielem,3)) + 1.d0
83  ENDDO ! IELEM
84 !
85 ! VECTOR MODE WITH FORCED VECTORISATION
86 ! (FUJITSU COMMANDS, THEN CRAY COMMANDS)
87 !
88  DO ib = 1,(nelem+lv-1)/lv
89 !VOCL LOOP,NOVREC
90 !DIR$ IVDEP
91  DO ielem = 1+(ib-1)*lv , min(nelem,ib*lv)
92  v(ikle(ielem,1)) = v(ikle(ielem,1)) - 1.d0
93  v(ikle(ielem,2)) = v(ikle(ielem,2)) - 1.d0
94  v(ikle(ielem,3)) = v(ikle(ielem,3)) - 1.d0
95  ENDDO ! IELEM
96  ENDDO ! IB
97 !
98 !-----------------------------------------------------------------------
99 !
100  IF(dot(npoin,v,v).GT.0.5d0.AND.lv.NE.1) THEN
101  lv = lv/2
102  IF(lv.LT.64) THEN
103  lv = 1
104  GO TO 1000
105  ENDIF
106  GO TO 5
107  ENDIF
108 !
109 1000 CONTINUE
110 !
111 !-----------------------------------------------------------------------
112 !
113  RETURN
114  END
subroutine vecle3(LV, IKLE, NELEM, NELMAX, NPOIN, V)
Definition: vecle3.f:7
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
double precision function dot(NPOIN, X, Y)
Definition: dot.f:7
Definition: bief.f:3