rem41.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\utils\bief\rem41.f
00002 !
00068                      SUBROUTINE REM41
00069 !                    ****************
00070 !
00071      &(X, XA1 ,XA2 ,XA3 ,XA4 ,XA5 ,
00072      &    XA6 ,XA7 ,XA8 ,XA9 ,XA10,
00073      &    XA11,XA12,XA13,XA14,XA15,
00074      &    IKLE1,IKLE2,IKLE3,IKLE4,IKLE5,IKLE6,
00075      &    NELEM,NELMAX,NPOIN,LV)
00076 !
00077 !***********************************************************************
00078 ! BIEF   V6P1                                   21/08/2010
00079 !***********************************************************************
00080 !
00081 !
00082 !
00083 !
00084 !
00085 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00086 !| IKLE1          |-->| GLOBAL NUMBER OF THE FIRST POINT OF PRISMS
00087 !| IKLE2          |-->| GLOBAL NUMBER OF THE SECOND POINT OF PRISMS
00088 !| IKLE3          |-->| GLOBAL NUMBER OF THE THIRD POINT OF PRISMS
00089 !| IKLE4          |-->| GLOBAL NUMBER OF THE FOURTH POINT OF PRISMS
00090 !| IKLE5          |-->| GLOBAL NUMBER OF THE FIFTH POINT OF PRISMS
00091 !| IKLE6          |-->| GLOBAL NUMBER OF THE SIXTH POINT OF PRISMS
00092 !| LV             |-->| VECTOR LENGTH OF THE MACHINE
00093 !| NELEM          |-->| NUMBER OF ELEMENTS
00094 !| NELMAX         |-->| MAXIMUM NUMBER OF ELEMENTS
00095 !| NPOIN          |-->| NUMBER OF POINTS
00096 !| X              |<->| AT THE BEGINNING : B
00097 !|                |   | AT THE END       : THE RESULT
00098 !| XA1            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00099 !| XA2            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00100 !| XA3            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00101 !| XA4            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00102 !| XA5            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00103 !| XA6            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00104 !| XA7            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00105 !| XA8            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00106 !| XA9            |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00107 !| XA10           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00108 !| XA11           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00109 !| XA12           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00110 !| XA13           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00111 !| XA14           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00112 !| XA15           |<--| OFF-DIAGONAL TERMS OF THE LOWER PART OF MATRIX
00113 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00114 !
00115       IMPLICIT NONE
00116       INTEGER LNG,LU
00117       COMMON/INFO/LNG,LU
00118 !
00119 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00120 !
00121       INTEGER, INTENT(IN) :: NPOIN,NELEM,NELMAX,LV
00122       INTEGER, INTENT(IN) :: IKLE1(NELMAX),IKLE2(NELMAX),IKLE3(NELMAX)
00123       INTEGER, INTENT(IN) :: IKLE4(NELMAX),IKLE5(NELMAX),IKLE6(NELMAX)
00124 !
00125       DOUBLE PRECISION, INTENT(INOUT) :: X(NPOIN)
00126       DOUBLE PRECISION, INTENT(IN) :: XA1(NELMAX)
00127       DOUBLE PRECISION, INTENT(IN) :: XA2(NELMAX)
00128       DOUBLE PRECISION, INTENT(IN) :: XA3(NELMAX)
00129       DOUBLE PRECISION, INTENT(IN) :: XA4(NELMAX)
00130       DOUBLE PRECISION, INTENT(IN) :: XA5(NELMAX)
00131       DOUBLE PRECISION, INTENT(IN) :: XA6(NELMAX)
00132       DOUBLE PRECISION, INTENT(IN) :: XA7(NELMAX)
00133       DOUBLE PRECISION, INTENT(IN) :: XA8(NELMAX)
00134       DOUBLE PRECISION, INTENT(IN) :: XA9(NELMAX)
00135       DOUBLE PRECISION, INTENT(IN) :: XA10(NELMAX)
00136       DOUBLE PRECISION, INTENT(IN) :: XA11(NELMAX)
00137       DOUBLE PRECISION, INTENT(IN) :: XA12(NELMAX)
00138       DOUBLE PRECISION, INTENT(IN) :: XA13(NELMAX)
00139       DOUBLE PRECISION, INTENT(IN) :: XA14(NELMAX)
00140       DOUBLE PRECISION, INTENT(IN) :: XA15(NELMAX)
00141 !
00142 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00143 !
00144       INTEGER IELEM,IB
00145       INTRINSIC MIN
00146 !
00147 !-----------------------------------------------------------------------
00148 !
00149 ! RESUMES INVERSIONS OF THE LOWER TRIANGULAR MATRICES
00150 !
00151 !-----------------------------------------------------------------------
00152 ! LOOP IN SCALAR MODE (LV=1) OR WITH FORCED VECTORISATION
00153 !-----------------------------------------------------------------------
00154 !
00155       IF(LV.EQ.1) THEN
00156 !
00157 !  SCALAR MODE
00158 !
00159       DO IELEM = NELEM , 1 , -1
00160         X(IKLE5(IELEM))=X(IKLE5(IELEM))-XA15(IELEM)*X(IKLE6(IELEM))
00161         X(IKLE4(IELEM))=X(IKLE4(IELEM))-XA14(IELEM)*X(IKLE6(IELEM))
00162      &                                 -XA13(IELEM)*X(IKLE5(IELEM))
00163         X(IKLE3(IELEM))=X(IKLE3(IELEM))-XA12(IELEM)*X(IKLE6(IELEM))
00164      &                                 -XA11(IELEM)*X(IKLE5(IELEM))
00165      &                                 -XA10(IELEM)*X(IKLE4(IELEM))
00166         X(IKLE2(IELEM))=X(IKLE2(IELEM))-XA9 (IELEM)*X(IKLE6(IELEM))
00167      &                                 -XA8 (IELEM)*X(IKLE5(IELEM))
00168      &                                 -XA7 (IELEM)*X(IKLE4(IELEM))
00169      &                                 -XA6 (IELEM)*X(IKLE3(IELEM))
00170         X(IKLE1(IELEM))=X(IKLE1(IELEM))-XA5 (IELEM)*X(IKLE6(IELEM))
00171      &                                 -XA4 (IELEM)*X(IKLE5(IELEM))
00172      &                                 -XA3 (IELEM)*X(IKLE4(IELEM))
00173      &                                 -XA2 (IELEM)*X(IKLE3(IELEM))
00174      &                                 -XA1 (IELEM)*X(IKLE2(IELEM))
00175       ENDDO ! IELEM
00176 !
00177       ELSE
00178 !
00179 !  VECTOR MODE
00180 !
00181       DO IB = (NELEM+LV-1)/LV , 1 , -1
00182 !VOCL LOOP,NOVREC
00183 !DIR$ IVDEP
00184       DO IELEM = MIN(NELEM,IB*LV) , 1+(IB-1)*LV , -1
00185         X(IKLE5(IELEM))=X(IKLE5(IELEM))-XA15(IELEM)*X(IKLE6(IELEM))
00186         X(IKLE4(IELEM))=X(IKLE4(IELEM))-XA14(IELEM)*X(IKLE6(IELEM))
00187      &                                 -XA13(IELEM)*X(IKLE5(IELEM))
00188         X(IKLE3(IELEM))=X(IKLE3(IELEM))-XA12(IELEM)*X(IKLE6(IELEM))
00189      &                                 -XA11(IELEM)*X(IKLE5(IELEM))
00190      &                                 -XA10(IELEM)*X(IKLE4(IELEM))
00191         X(IKLE2(IELEM))=X(IKLE2(IELEM))-XA9 (IELEM)*X(IKLE6(IELEM))
00192      &                                 -XA8 (IELEM)*X(IKLE5(IELEM))
00193      &                                 -XA7 (IELEM)*X(IKLE4(IELEM))
00194      &                                 -XA6 (IELEM)*X(IKLE3(IELEM))
00195         X(IKLE1(IELEM))=X(IKLE1(IELEM))-XA5 (IELEM)*X(IKLE6(IELEM))
00196      &                                 -XA4 (IELEM)*X(IKLE5(IELEM))
00197      &                                 -XA3 (IELEM)*X(IKLE4(IELEM))
00198      &                                 -XA2 (IELEM)*X(IKLE3(IELEM))
00199      &                                 -XA1 (IELEM)*X(IKLE2(IELEM))
00200       ENDDO ! IELEM
00201       ENDDO ! IB
00202 !
00203       ENDIF
00204 !
00205 !-----------------------------------------------------------------------
00206 !
00207       RETURN
00208       END

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