assve1.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\utils\bief\assve1.f
00002 !
00046                      SUBROUTINE ASSVE1
00047 !                    *****************
00048 !
00049      &(X, IKLE,W, NELEM,NELMAX,LV,MSK,MASKEL)
00050 !
00051 !***********************************************************************
00052 ! BIEF   V6P1                                   21/08/2010
00053 !***********************************************************************
00054 !
00055 !
00056 !
00057 !
00058 !
00059 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00060 !| IKLE           |-->| CONNECTIVITY TABLE
00061 !| LV             |-->| VECTOR LENGTH OF THE COMPUTER
00062 !| MASKEL         |-->| MASKING OF ELEMENTS
00063 !|                |   | =1. : NORMAL   =0. : MASKED ELEMENT
00064 !| MSK            |-->| IF YES, THERE IS MASKED ELEMENTS.
00065 !| NELEM          |-->| NUMBER OF ELEMENTS IN THE MESH
00066 !| NELMAX         |-->| FIRST DIMENSION OF IKLE AND W.
00067 !| W              |-->| WORK ARRAY WITH A NON ASSEMBLED FORM OF THE
00068 !|                |   | RESULT
00069 !| X              |<->| ASSEMBLED VECTOR
00070 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00071 !
00072       IMPLICIT NONE
00073       INTEGER LNG,LU
00074       COMMON/INFO/LNG,LU
00075 !
00076 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00077 !
00078       DOUBLE PRECISION, INTENT(INOUT) :: X(*)
00079       INTEGER         , INTENT(IN)    :: NELEM,NELMAX,LV
00080       INTEGER         , INTENT(IN)    :: IKLE(NELMAX)
00081       DOUBLE PRECISION, INTENT(IN)    :: W(NELMAX),MASKEL(NELMAX)
00082       LOGICAL         , INTENT(IN)    :: MSK
00083 !
00084 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00085 !
00086       INTEGER IELEM,IB
00087 !
00088       INTRINSIC MIN
00089 !
00090 !-----------------------------------------------------------------------
00091 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
00092 !-----------------------------------------------------------------------
00093 !
00094 !  WITH MASKING
00095 !
00096       IF(MSK) THEN
00097 !
00098       IF(LV.EQ.1) THEN
00099 !
00100 !  SCALAR MODE
00101 !
00102       DO IELEM = 1 , NELEM
00103         X(IKLE(IELEM)) = X(IKLE(IELEM)) + W(IELEM) * MASKEL(IELEM)
00104       ENDDO ! IELEM
00105 !
00106       ELSE
00107 !
00108 !  VECTOR MODE
00109 !
00110       DO IB = 1,(NELEM+LV-1)/LV
00111 !VOCL LOOP,NOVREC
00112 !DIR$ IVDEP
00113       DO IELEM = 1+(IB-1)*LV , MIN(NELEM,IB*LV)
00114         X(IKLE(IELEM)) = X(IKLE(IELEM)) + W(IELEM) * MASKEL(IELEM)
00115       ENDDO ! IELEM
00116       ENDDO ! IB
00117 !
00118       ENDIF
00119 !
00120 !-----------------------------------------------------------------------
00121 !
00122 !  WITHOUT MASKING
00123 !
00124       ELSE
00125 !
00126       IF(LV.EQ.1) THEN
00127 !
00128 !  SCALAR MODE
00129 !
00130       DO IELEM = 1 , NELEM
00131         X(IKLE(IELEM)) = X(IKLE(IELEM)) + W(IELEM)
00132       ENDDO ! IELEM
00133 !
00134       ELSE
00135 !
00136 !  VECTOR MODE
00137 !
00138       DO IB = 1,(NELEM+LV-1)/LV
00139 !VOCL LOOP,NOVREC
00140 !DIR$ IVDEP
00141       DO IELEM = 1+(IB-1)*LV , MIN(NELEM,IB*LV)
00142         X(IKLE(IELEM)) = X(IKLE(IELEM)) + W(IELEM)
00143       ENDDO ! IELEM
00144       ENDDO ! IB
00145 !
00146       ENDIF
00147 !
00148       ENDIF
00149 !
00150 !-----------------------------------------------------------------------
00151 !
00152       RETURN
00153       END

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