rem21.f

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

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