des41.f

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

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