vecle3.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\utils\bief\vecle3.f
00002 !
00069                      SUBROUTINE VECLE3
00070 !                    *****************
00071 !
00072      & (LV,IKLE,NELEM,NELMAX,NPOIN,V)
00073 !
00074 !***********************************************************************
00075 ! BIEF   V6P1                                   21/08/2010
00076 !***********************************************************************
00077 !
00078 !
00079 !
00080 !
00081 !
00082 !
00083 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00084 !| IKLE           |-->| CONNECTIVITY TABLE.
00085 !| LV             |-->| VECTOR LENGTH OF THE MACHINE
00086 !| NELEM          |-->| NUMBER OF ELEMENTS
00087 !| NELMAX         |-->| MAXIMUM NUMBER OF ELEMENTS
00088 !| NPOIN          |-->| NUMBER OF POINTS
00089 !| V              |-->| ARRAY OF SIZE NPOIN
00090 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00091 !
00092       USE BIEF, EX_VECLE3 => VECLE3
00093 !
00094       IMPLICIT NONE
00095       INTEGER LNG,LU
00096       COMMON/INFO/LNG,LU
00097 !
00098 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00099 !
00100       INTEGER, INTENT(INOUT)          :: LV
00101       INTEGER, INTENT(IN)             :: NELEM,NELMAX,NPOIN
00102       INTEGER, INTENT(IN)             :: IKLE(NELMAX,3)
00103       DOUBLE PRECISION, INTENT(INOUT) :: V(NPOIN)
00104 !
00105 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00106 !
00107       INTEGER IELEM,IB
00108       DOUBLE PRECISION Y(1),Z(1)
00109 !
00110 !-----------------------------------------------------------------------
00111 !
00112       LV = 1024
00113 !
00114 5     CONTINUE
00115 !
00116 !  INITIALISES V AT 0
00117 !
00118       CALL OV( 'X=C     ' , V , Y , Z , 0.D0 , NPOIN )
00119 !
00120 !  SCALAR MODE
00121 !
00122       DO IELEM = 1 , NELEM
00123         V(IKLE(IELEM,1)) = V(IKLE(IELEM,1)) + 1.D0
00124         V(IKLE(IELEM,2)) = V(IKLE(IELEM,2)) + 1.D0
00125         V(IKLE(IELEM,3)) = V(IKLE(IELEM,3)) + 1.D0
00126       ENDDO ! IELEM
00127 !
00128 !  VECTOR MODE WITH FORCED VECTORISATION
00129 ! (FUJITSU COMMANDS, THEN CRAY COMMANDS)
00130 !
00131       DO IB = 1,(NELEM+LV-1)/LV
00132 !VOCL LOOP,NOVREC
00133 !DIR$ IVDEP
00134       DO IELEM = 1+(IB-1)*LV , MIN(NELEM,IB*LV)
00135         V(IKLE(IELEM,1)) = V(IKLE(IELEM,1)) - 1.D0
00136         V(IKLE(IELEM,2)) = V(IKLE(IELEM,2)) - 1.D0
00137         V(IKLE(IELEM,3)) = V(IKLE(IELEM,3)) - 1.D0
00138       ENDDO ! IELEM
00139       ENDDO ! IB
00140 !
00141 !-----------------------------------------------------------------------
00142 !
00143       IF(DOT(NPOIN,V,V).GT.0.5D0.AND.LV.NE.1) THEN
00144         LV = LV/2
00145         IF(LV.LT.64) THEN
00146           LV = 1
00147           GO TO 1000
00148         ENDIF
00149         GO TO 5
00150       ENDIF
00151 !
00152 1000  CONTINUE
00153 !
00154 !-----------------------------------------------------------------------
00155 !
00156       RETURN
00157       END

Generated on Fri Aug 31 2013 18:12:58 by S.E.Bourban (HRW) using doxygen 1.7.0