mer11.f

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

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