des21.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\utils\bief\des21.f
00002 !
00065                      SUBROUTINE DES21
00066 !                    ****************
00067 !
00068      &(X, XA1,XA2,XA3,XA4,XA5,XA6 , IKLE1,IKLE2,IKLE3,IKLE4,
00069      & NELEM,NELMAX,NPOIN,LV)
00070 !
00071 !***********************************************************************
00072 ! BIEF   V6P1                                   21/08/2010
00073 !***********************************************************************
00074 !
00075 !
00076 !
00077 !
00078 !
00079 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00080 !| IKLE1          |-->| GLOBAL NUMBER OF THE FIRST POINT OF QUADRILATERALS
00081 !| IKLE2          |-->| GLOBAL NUMBER OF THE SECOND POINT OF QUADRILATERALS
00082 !| IKLE3          |-->| GLOBAL NUMBER OF THE THIRD POINT OF QUADRILATERALS
00083 !| IKLE4          |-->| GLOBAL NUMBER OF THE FOURTH POINT OF QUADRILATERALS
00084 !| LV             |-->| VECTOR LENGTH OF THE MACHINE
00085 !| NELEM          |-->| NUMBER OF ELEMENTS
00086 !| NELMAX         |-->| MAXIMUM NUMBER OF ELEMENTS
00087 !| NPOIN          |-->| NUMBER OF POINTS
00088 !| X              |<->| AT THE BEGINNING : B
00089 !|                |   | AT THE END       : THE RESULT
00090 !| XA1            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00091 !| XA2            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00092 !| XA3            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00093 !| XA4            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00094 !| XA5            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00095 !| XA6            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00096 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00097 !
00098       IMPLICIT NONE
00099       INTEGER LNG,LU
00100       COMMON/INFO/LNG,LU
00101 !
00102 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00103 !
00104       INTEGER          , INTENT(IN)    :: NPOIN,NELEM,NELMAX,LV
00105       DOUBLE PRECISION , INTENT(INOUT) :: X(NPOIN)
00106       DOUBLE PRECISION , INTENT(IN)    :: XA1(NELMAX)
00107       DOUBLE PRECISION , INTENT(IN)    :: XA2(NELMAX)
00108       DOUBLE PRECISION , INTENT(IN)    :: XA3(NELMAX)
00109       DOUBLE PRECISION , INTENT(IN)    :: XA4(NELMAX)
00110       DOUBLE PRECISION , INTENT(IN)    :: XA5(NELMAX)
00111       DOUBLE PRECISION , INTENT(IN)    :: XA6(NELMAX)
00112       INTEGER          , INTENT(IN)    :: IKLE1(NELMAX)
00113       INTEGER          , INTENT(IN)    :: IKLE2(NELMAX)
00114       INTEGER          , INTENT(IN)    :: IKLE3(NELMAX)
00115       INTEGER          , INTENT(IN)    :: IKLE4(NELMAX)
00116 !
00117 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00118 !
00119       INTEGER IELEM,IB
00120 !
00121       INTRINSIC MIN
00122 !
00123 !-----------------------------------------------------------------------
00124 !
00125 ! RESUMES INVERSIONS OF THE LOWER TRIANGULAR MATRICES
00126 !
00127 !-----------------------------------------------------------------------
00128 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
00129 !-----------------------------------------------------------------------
00130 !
00131       IF(LV.EQ.1) THEN
00132 !
00133 !  SCALAR MODE
00134 !
00135       DO IELEM = 1 , NELEM
00136         X(IKLE2(IELEM))=X(IKLE2(IELEM))-XA1(IELEM)*X(IKLE1(IELEM))
00137         X(IKLE3(IELEM))=X(IKLE3(IELEM))-XA2(IELEM)*X(IKLE1(IELEM))
00138      &                                 -XA4(IELEM)*X(IKLE2(IELEM))
00139         X(IKLE4(IELEM))=X(IKLE4(IELEM))-XA3(IELEM)*X(IKLE1(IELEM))
00140      &                                 -XA5(IELEM)*X(IKLE2(IELEM))
00141      &                                 -XA6(IELEM)*X(IKLE3(IELEM))
00142       ENDDO ! IELEM
00143 !
00144       ELSE
00145 !
00146 !  VECTOR MODE
00147 !
00148       DO IB = 1,(NELEM+LV-1)/LV
00149 !VOCL LOOP,NOVREC
00150 !DIR$ IVDEP
00151       DO IELEM = 1+(IB-1)*LV , MIN(NELEM,IB*LV)
00152         X(IKLE2(IELEM))=X(IKLE2(IELEM))-XA1(IELEM)*X(IKLE1(IELEM))
00153         X(IKLE3(IELEM))=X(IKLE3(IELEM))-XA2(IELEM)*X(IKLE1(IELEM))
00154      &                                 -XA4(IELEM)*X(IKLE2(IELEM))
00155         X(IKLE4(IELEM))=X(IKLE4(IELEM))-XA3(IELEM)*X(IKLE1(IELEM))
00156      &                                 -XA5(IELEM)*X(IKLE2(IELEM))
00157      &                                 -XA6(IELEM)*X(IKLE3(IELEM))
00158       ENDDO ! IELEM
00159       ENDDO ! IB
00160 !
00161       ENDIF
00162 !
00163 !-----------------------------------------------------------------------
00164 !
00165       RETURN
00166       END

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