mv0404.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\utils\bief\mv0404.f
00002 !
00084                      SUBROUTINE MV0404
00085 !                    *****************
00086 !
00087      &(OP, X , DA,TYPDIA,
00088      & XA12,XA13,XA14,XA21,XA23,XA24,XA31,XA32,XA34,XA41,XA42,XA43,
00089      & TYPEXT, Y,C,IKLE1,IKLE2,IKLE3,IKLE4,NPOIN,NELEM,W1,W2,W3,W4)
00090 !
00091 !***********************************************************************
00092 ! BIEF   V6P1                                   21/08/2010
00093 !***********************************************************************
00094 !
00095 !
00096 !
00097 !
00098 !
00099 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00100 !| C              |-->| A GIVEN CONSTANT
00101 !| DA             |-->| MATRIX DIAGONAL
00102 !| IKLE1          |-->| FIRST POINTS OF ELEMENTS
00103 !| IKLE2          |-->| SECOND POINTS OF ELEMENTS
00104 !| IKLE3          |-->| THIRD POINTS OF ELEMENTS
00105 !| IKLE4          |-->| FOURTH POINTS OF ELEMENTS
00106 !| NELEM          |-->| NUMBER OF ELEMENTS
00107 !| NPOIN          |-->| NUMBER OF LINEAR POINTS
00108 !| OP             |-->| OPERATION TO BE DONE (SEE ABOVE)
00109 !| TYPDIA         |-->| TYPE OF DIAGONAL:
00110 !|                |   | TYPDIA = 'Q' : ANY VALUE
00111 !|                |   | TYPDIA = 'I' : IDENTITY
00112 !|                |   | TYPDIA = '0' : ZERO
00113 !| TYPEXT         |-->| TYPE OF OFF-DIAGONAL TERMS
00114 !|                |   | TYPEXT = 'Q' : ANY VALUE
00115 !|                |   | TYPEXT = 'S' : SYMMETRIC
00116 !|                |   | TYPEXT = '0' : ZERO
00117 !| W1             |<->| RESULT IN NON ASSEMBLED FORM
00118 !| W2             |<->| RESULT IN NON ASSEMBLED FORM
00119 !| W3             |<->| RESULT IN NON ASSEMBLED FORM
00120 !| W4             |<->| RESULT IN NON ASSEMBLED FORM
00121 !| X              |<->| RESULT IN ASSEMBLED FORM
00122 !| XA13           |-->| OFF-DIAGONAL TERM OF MATRIX
00123 !| XA14           |-->| OFF-DIAGONAL TERM OF MATRIX
00124 !| XA21           |-->| OFF-DIAGONAL TERM OF MATRIX
00125 !| XA23           |-->| OFF-DIAGONAL TERM OF MATRIX
00126 !| XA24           |-->| OFF-DIAGONAL TERM OF MATRIX
00127 !| XA31           |-->| OFF-DIAGONAL TERM OF MATRIX
00128 !| XA32           |-->| OFF-DIAGONAL TERM OF MATRIX
00129 !| XA34           |-->| OFF-DIAGONAL TERM OF MATRIX
00130 !| XA41           |-->| OFF-DIAGONAL TERM OF MATRIX
00131 !| XA42           |-->| OFF-DIAGONAL TERM OF MATRIX
00132 !| XA43           |-->| OFF-DIAGONAL TERM OF MATRIX
00133 !| Y              |-->| VECTOR USED IN THE OPERATION
00134 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00135 !
00136       USE BIEF, EX_MV0404 => MV0404
00137 !
00138       IMPLICIT NONE
00139       INTEGER LNG,LU
00140       COMMON/INFO/LNG,LU
00141 !
00142 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00143 !
00144       INTEGER, INTENT(IN) :: NELEM,NPOIN
00145 !
00146       INTEGER, INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*),IKLE4(*)
00147 !
00148       DOUBLE PRECISION, INTENT(INOUT) :: W1(*),W2(*),W3(*),W4(*)
00149       DOUBLE PRECISION, INTENT(IN) :: Y(*),DA(*)
00150       DOUBLE PRECISION, INTENT(INOUT) :: X(*)
00151       DOUBLE PRECISION, INTENT(IN) :: XA12(*),XA13(*),XA14(*)
00152       DOUBLE PRECISION, INTENT(IN) :: XA21(*),XA23(*),XA24(*)
00153       DOUBLE PRECISION, INTENT(IN) :: XA31(*),XA32(*),XA34(*)
00154       DOUBLE PRECISION, INTENT(IN) :: XA41(*),XA42(*),XA43(*)
00155       DOUBLE PRECISION, INTENT(IN) :: C
00156 !
00157       CHARACTER(LEN=8), INTENT(IN) :: OP
00158       CHARACTER(LEN=1), INTENT(IN) :: TYPDIA,TYPEXT
00159 !
00160 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00161 !
00162       INTEGER IELEM
00163       DOUBLE PRECISION Z(1)
00164 !
00165 !-----------------------------------------------------------------------
00166 !
00167       IF(OP(1:8).EQ.'X=AY    ') THEN
00168 !
00169 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00170 !
00171         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00172 !
00173           DO IELEM = 1 , NELEM
00174             W1(IELEM) =     XA12(IELEM) * Y(IKLE2(IELEM))
00175      &                    + XA13(IELEM) * Y(IKLE3(IELEM))
00176      &                    + XA14(IELEM) * Y(IKLE4(IELEM))
00177             W2(IELEM) =     XA21(IELEM) * Y(IKLE1(IELEM))
00178      &                    + XA23(IELEM) * Y(IKLE3(IELEM))
00179      &                    + XA24(IELEM) * Y(IKLE4(IELEM))
00180             W3(IELEM) =     XA31(IELEM) * Y(IKLE1(IELEM))
00181      &                    + XA32(IELEM) * Y(IKLE2(IELEM))
00182      &                    + XA34(IELEM) * Y(IKLE4(IELEM))
00183             W4(IELEM) =     XA41(IELEM) * Y(IKLE1(IELEM))
00184      &                    + XA42(IELEM) * Y(IKLE2(IELEM))
00185      &                    + XA43(IELEM) * Y(IKLE3(IELEM))
00186           END DO
00187 !
00188         ELSEIF(TYPEXT(1:1).EQ.'0') THEN
00189 !
00190           CALL OV ('X=C     ', W1 , Y , Z , 0.D0 , NELEM )
00191           CALL OV ('X=C     ', W2 , Y , Z , 0.D0 , NELEM )
00192           CALL OV ('X=C     ', W3 , Y , Z , 0.D0 , NELEM )
00193           CALL OV ('X=C     ', W4 , Y , Z , 0.D0 , NELEM )
00194 !
00195         ELSE
00196 !
00197           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00198           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00199           CALL PLANTE(0)
00200           STOP
00201 !
00202         ENDIF
00203 !
00204 !   CONTRIBUTION OF THE DIAGONAL:
00205 !
00206         IF(TYPDIA(1:1).EQ.'Q') THEN
00207           CALL OV ('X=YZ    ', X , Y , DA , C  , NPOIN )
00208         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00209           CALL OV ('X=Y     ', X , Y , Z  , C  , NPOIN )
00210         ELSEIF(TYPDIA(1:1).EQ.'0') THEN
00211           CALL OV ('X=C     ', X , Y , Z  , 0.D0 , NPOIN )
00212         ELSE
00213           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00214           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00215           CALL PLANTE(0)
00216           STOP
00217         ENDIF
00218 !
00219 !-----------------------------------------------------------------------
00220 !
00221       ELSEIF(OP(1:8).EQ.'X=CAY   ') THEN
00222 !
00223 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00224 !
00225         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00226 !
00227           DO IELEM = 1 , NELEM
00228             W1(IELEM) =  C * (   XA12(IELEM) * Y(IKLE2(IELEM))
00229      &                         + XA13(IELEM) * Y(IKLE3(IELEM))
00230      &                         + XA14(IELEM) * Y(IKLE4(IELEM)) )
00231             W2(IELEM) =  C * (   XA21(IELEM) * Y(IKLE1(IELEM))
00232      &                         + XA23(IELEM) * Y(IKLE3(IELEM))
00233      &                         + XA24(IELEM) * Y(IKLE4(IELEM)) )
00234             W3(IELEM) =  C * (   XA31(IELEM) * Y(IKLE1(IELEM))
00235      &                         + XA32(IELEM) * Y(IKLE2(IELEM))
00236      &                         + XA34(IELEM) * Y(IKLE4(IELEM)) )
00237             W4(IELEM) =  C * (   XA41(IELEM) * Y(IKLE1(IELEM))
00238      &                         + XA42(IELEM) * Y(IKLE2(IELEM))
00239      &                         + XA43(IELEM) * Y(IKLE3(IELEM)) )
00240           ENDDO ! IELEM
00241 !
00242         ELSEIF(TYPEXT(1:1).EQ.'0') THEN
00243 !
00244           CALL OV ('X=C     ', W1 , Y , Z , 0.D0 , NELEM )
00245           CALL OV ('X=C     ', W2 , Y , Z , 0.D0 , NELEM )
00246           CALL OV ('X=C     ', W3 , Y , Z , 0.D0 , NELEM )
00247           CALL OV ('X=C     ', W4 , Y , Z , 0.D0 , NELEM )
00248 !
00249         ELSE
00250 !
00251           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00252           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00253           CALL PLANTE(0)
00254           STOP
00255 !
00256         ENDIF
00257 !
00258 !   CONTRIBUTION OF THE DIAGONAL:
00259 !
00260         IF(TYPDIA(1:1).EQ.'Q') THEN
00261           CALL OV ('X=CYZ   ', X , Y , DA , C  , NPOIN )
00262         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00263           CALL OV ('X=CY    ', X , Y , Z  , C  , NPOIN )
00264         ELSEIF(TYPDIA(1:1).EQ.'0') THEN
00265           CALL OV ('X=C     ', X , Y , Z  , 0.D0 , NPOIN )
00266         ELSE
00267           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00268           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00269           CALL PLANTE(0)
00270           STOP
00271         ENDIF
00272 !
00273 !-----------------------------------------------------------------------
00274 !
00275       ELSEIF(OP(1:8).EQ.'X=-AY   ') THEN
00276 !
00277 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00278 !
00279         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).NE.'S') THEN
00280 !
00281           DO IELEM = 1 , NELEM
00282             W1(IELEM) =   - XA12(IELEM) * Y(IKLE2(IELEM))
00283      &                    - XA13(IELEM) * Y(IKLE3(IELEM))
00284      &                    - XA14(IELEM) * Y(IKLE4(IELEM))
00285             W2(IELEM) =   - XA21(IELEM) * Y(IKLE1(IELEM))
00286      &                    - XA23(IELEM) * Y(IKLE3(IELEM))
00287      &                    - XA24(IELEM) * Y(IKLE4(IELEM))
00288             W3(IELEM) =   - XA31(IELEM) * Y(IKLE1(IELEM))
00289      &                    - XA32(IELEM) * Y(IKLE2(IELEM))
00290      &                    - XA34(IELEM) * Y(IKLE4(IELEM))
00291             W4(IELEM) =   - XA41(IELEM) * Y(IKLE1(IELEM))
00292      &                    - XA42(IELEM) * Y(IKLE2(IELEM))
00293      &                    - XA43(IELEM) * Y(IKLE3(IELEM))
00294           ENDDO ! IELEM
00295 !
00296         ELSEIF(TYPEXT(1:1).EQ.'0') THEN
00297 !
00298           CALL OV ('X=C     ', W1 , Y , Z , 0.D0 , NELEM )
00299           CALL OV ('X=C     ', W2 , Y , Z , 0.D0 , NELEM )
00300           CALL OV ('X=C     ', W3 , Y , Z , 0.D0 , NELEM )
00301           CALL OV ('X=C     ', W4 , Y , Z , 0.D0 , NELEM )
00302 !
00303         ELSE
00304 !
00305           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00306           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00307           CALL PLANTE(0)
00308           STOP
00309 !
00310         ENDIF
00311 !
00312 !   CONTRIBUTION OF THE DIAGONAL:
00313 !
00314         IF(TYPDIA(1:1).EQ.'Q') THEN
00315           CALL OV ('X=-YZ   ', X , Y , DA , C  , NPOIN )
00316         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00317           CALL OV ('X=-Y    ', X , Y , Z  , C  , NPOIN )
00318         ELSEIF(TYPDIA(1:1).EQ.'0') THEN
00319           CALL OV ('X=C     ', X , Y , Z  , 0.D0 , NPOIN )
00320         ELSE
00321           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00322           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00323           CALL PLANTE(0)
00324           STOP
00325         ENDIF
00326 !
00327 !-----------------------------------------------------------------------
00328 !
00329       ELSEIF(OP(1:8).EQ.'X=X+AY  ') THEN
00330 !
00331 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00332 !
00333         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00334 !
00335           DO IELEM = 1 , NELEM
00336             W1(IELEM) = W1(IELEM) + XA12(IELEM) * Y(IKLE2(IELEM))
00337      &                            + XA13(IELEM) * Y(IKLE3(IELEM))
00338      &                            + XA14(IELEM) * Y(IKLE4(IELEM))
00339             W2(IELEM) = W2(IELEM) + XA21(IELEM) * Y(IKLE1(IELEM))
00340      &                            + XA23(IELEM) * Y(IKLE3(IELEM))
00341      &                            + XA24(IELEM) * Y(IKLE4(IELEM))
00342             W3(IELEM) = W3(IELEM) + XA31(IELEM) * Y(IKLE1(IELEM))
00343      &                            + XA32(IELEM) * Y(IKLE2(IELEM))
00344      &                            + XA34(IELEM) * Y(IKLE4(IELEM))
00345             W4(IELEM) = W4(IELEM) + XA41(IELEM) * Y(IKLE1(IELEM))
00346      &                            + XA42(IELEM) * Y(IKLE2(IELEM))
00347      &                            + XA43(IELEM) * Y(IKLE3(IELEM))
00348           ENDDO ! IELEM
00349 !
00350         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00351 !
00352           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00353           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00354           CALL PLANTE(0)
00355           STOP
00356 !
00357         ENDIF
00358 !
00359 !   CONTRIBUTION OF THE DIAGONAL:
00360 !
00361         IF(TYPDIA(1:1).EQ.'Q') THEN
00362           CALL OV ('X=X+YZ  ', X , Y , DA , C , NPOIN )
00363         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00364           CALL OV ('X=X+Y   ', X , Y , Z  , C  , NPOIN )
00365         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00366           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00367           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00368           CALL PLANTE(0)
00369           STOP
00370         ENDIF
00371 !
00372 !-----------------------------------------------------------------------
00373 !
00374       ELSEIF(OP(1:8).EQ.'X=X-AY  ') THEN
00375 !
00376 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00377 !
00378         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00379 !
00380           DO IELEM = 1 , NELEM
00381             W1(IELEM) = W1(IELEM) - XA12(IELEM) * Y(IKLE2(IELEM))
00382      &                            - XA13(IELEM) * Y(IKLE3(IELEM))
00383      &                            - XA14(IELEM) * Y(IKLE4(IELEM))
00384             W2(IELEM) = W2(IELEM) - XA21(IELEM) * Y(IKLE1(IELEM))
00385      &                            - XA23(IELEM) * Y(IKLE3(IELEM))
00386      &                            - XA24(IELEM) * Y(IKLE4(IELEM))
00387             W3(IELEM) = W3(IELEM) - XA31(IELEM) * Y(IKLE1(IELEM))
00388      &                            - XA32(IELEM) * Y(IKLE2(IELEM))
00389      &                            - XA34(IELEM) * Y(IKLE4(IELEM))
00390             W4(IELEM) = W4(IELEM) - XA41(IELEM) * Y(IKLE1(IELEM))
00391      &                            - XA42(IELEM) * Y(IKLE2(IELEM))
00392      &                            - XA43(IELEM) * Y(IKLE3(IELEM))
00393           ENDDO ! IELEM
00394 !
00395         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00396 !
00397           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00398           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00399           CALL PLANTE(0)
00400           STOP
00401 !
00402         ENDIF
00403 !
00404 !   CONTRIBUTION OF THE DIAGONAL:
00405 !
00406         IF(TYPDIA(1:1).EQ.'Q') THEN
00407           CALL OV ('X=X-YZ  ', X , Y , DA , C , NPOIN )
00408         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00409           CALL OV ('X=X-Y   ', X , Y , Z  , C  , NPOIN )
00410         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00411           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00412           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00413           CALL PLANTE(0)
00414           STOP
00415         ENDIF
00416 !
00417 !-----------------------------------------------------------------------
00418 !
00419       ELSEIF(OP(1:8).EQ.'X=X+CAY ') THEN
00420 !
00421 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00422 !
00423         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00424 !
00425           DO IELEM = 1 , NELEM
00426             W1(IELEM) = W1(IELEM)
00427      &              + C * (      XA12(IELEM) * Y(IKLE2(IELEM))
00428      &                         + XA13(IELEM) * Y(IKLE3(IELEM))
00429      &                         + XA14(IELEM) * Y(IKLE4(IELEM)) )
00430             W2(IELEM) = W2(IELEM)
00431      &              + C * (      XA21(IELEM) * Y(IKLE1(IELEM))
00432      &                         + XA23(IELEM) * Y(IKLE3(IELEM))
00433      &                         + XA24(IELEM) * Y(IKLE4(IELEM)) )
00434             W3(IELEM) = W3(IELEM)
00435      &              + C * (      XA31(IELEM) * Y(IKLE1(IELEM))
00436      &                         + XA32(IELEM) * Y(IKLE2(IELEM))
00437      &                         + XA34(IELEM) * Y(IKLE4(IELEM)) )
00438             W4(IELEM) = W4(IELEM)
00439      &              + C * (      XA41(IELEM) * Y(IKLE1(IELEM))
00440      &                         + XA42(IELEM) * Y(IKLE2(IELEM))
00441      &                         + XA43(IELEM) * Y(IKLE3(IELEM)) )
00442           ENDDO ! IELEM
00443 !
00444         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00445 !
00446           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00447           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00448           CALL PLANTE(0)
00449           STOP
00450 !
00451         ENDIF
00452 !
00453 !   CONTRIBUTION OF THE DIAGONAL:
00454 !
00455         IF(TYPDIA(1:1).EQ.'Q') THEN
00456           CALL OV ('X=X+CYZ  ', X , Y , DA , C , NPOIN )
00457         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00458           CALL OV ('X=X+CY   ', X , Y , Z  , C  , NPOIN )
00459         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00460           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00461           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00462           CALL PLANTE(0)
00463           STOP
00464         ENDIF
00465 !
00466 !-----------------------------------------------------------------------
00467 !
00468       ELSEIF(OP(1:8).EQ.'X=TAY   ') THEN
00469 !
00470 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00471 !
00472         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00473 !
00474           DO IELEM = 1 , NELEM
00475             W1(IELEM) =   + XA21(IELEM) * Y(IKLE2(IELEM))
00476      &                    + XA31(IELEM) * Y(IKLE3(IELEM))
00477      &                    + XA41(IELEM) * Y(IKLE4(IELEM))
00478             W2(IELEM) =   + XA12(IELEM) * Y(IKLE1(IELEM))
00479      &                    + XA32(IELEM) * Y(IKLE3(IELEM))
00480      &                    + XA42(IELEM) * Y(IKLE4(IELEM))
00481             W3(IELEM) =   + XA13(IELEM) * Y(IKLE1(IELEM))
00482      &                    + XA23(IELEM) * Y(IKLE2(IELEM))
00483      &                    + XA43(IELEM) * Y(IKLE4(IELEM))
00484             W4(IELEM) =   + XA14(IELEM) * Y(IKLE1(IELEM))
00485      &                    + XA24(IELEM) * Y(IKLE2(IELEM))
00486      &                    + XA34(IELEM) * Y(IKLE3(IELEM))
00487           ENDDO ! IELEM
00488 !
00489         ELSEIF(TYPEXT(1:1).EQ.'0') THEN
00490 !
00491           CALL OV ('X=C     ', W1 , Y , Z , 0.D0 , NELEM )
00492           CALL OV ('X=C     ', W2 , Y , Z , 0.D0 , NELEM )
00493           CALL OV ('X=C     ', W3 , Y , Z , 0.D0 , NELEM )
00494           CALL OV ('X=C     ', W4 , Y , Z , 0.D0 , NELEM )
00495 !
00496         ELSE
00497 !
00498           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00499           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00500           CALL PLANTE(0)
00501           STOP
00502 !
00503         ENDIF
00504 !
00505 !   CONTRIBUTION OF THE DIAGONAL
00506 !
00507         IF(TYPDIA(1:1).EQ.'Q') THEN
00508           CALL OV ('X=YZ    ', X , Y , DA , C  , NPOIN )
00509         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00510           CALL OV ('X=Y     ', X , Y , Z  , C  , NPOIN )
00511         ELSEIF(TYPDIA(1:1).EQ.'0') THEN
00512           CALL OV ('X=C     ', X , Y , DA , 0.D0 , NPOIN )
00513         ELSE
00514           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00515           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00516           CALL PLANTE(0)
00517           STOP
00518         ENDIF
00519 !
00520 !-----------------------------------------------------------------------
00521 !
00522       ELSEIF(OP(1:8).EQ.'X=-TAY  ') THEN
00523 !
00524 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00525 !
00526         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00527 !
00528           DO IELEM = 1 , NELEM
00529             W1(IELEM) =   - XA21(IELEM) * Y(IKLE2(IELEM))
00530      &                    - XA31(IELEM) * Y(IKLE3(IELEM))
00531      &                    - XA41(IELEM) * Y(IKLE4(IELEM))
00532             W2(IELEM) =   - XA12(IELEM) * Y(IKLE1(IELEM))
00533      &                    - XA32(IELEM) * Y(IKLE3(IELEM))
00534      &                    - XA42(IELEM) * Y(IKLE4(IELEM))
00535             W3(IELEM) =   - XA13(IELEM) * Y(IKLE1(IELEM))
00536      &                    - XA23(IELEM) * Y(IKLE2(IELEM))
00537      &                    - XA43(IELEM) * Y(IKLE4(IELEM))
00538             W4(IELEM) =   - XA14(IELEM) * Y(IKLE1(IELEM))
00539      &                    - XA24(IELEM) * Y(IKLE2(IELEM))
00540      &                    - XA34(IELEM) * Y(IKLE3(IELEM))
00541           ENDDO ! IELEM
00542 !
00543         ELSEIF(TYPEXT(1:1).EQ.'0') THEN
00544 !
00545           CALL OV ('X=C     ', W1 , Y , Z , 0.D0 , NELEM )
00546           CALL OV ('X=C     ', W2 , Y , Z , 0.D0 , NELEM )
00547           CALL OV ('X=C     ', W3 , Y , Z , 0.D0 , NELEM )
00548           CALL OV ('X=C     ', W4 , Y , Z , 0.D0 , NELEM )
00549 !
00550         ELSE
00551 !
00552           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00553           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00554           CALL PLANTE(0)
00555           STOP
00556 !
00557         ENDIF
00558 !
00559 !   CONTRIBUTION OF THE DIAGONAL
00560 !
00561         IF(TYPDIA(1:1).EQ.'Q') THEN
00562           CALL OV ('X=-YZ   ', X , Y , DA , C  , NPOIN )
00563         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00564           CALL OV ('X=-Y    ', X , Y , Z  , C  , NPOIN )
00565         ELSEIF(TYPDIA(1:1).EQ.'0') THEN
00566           CALL OV ('X=C     ', X , Y , DA , 0.D0 , NPOIN )
00567         ELSE
00568           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00569           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00570           CALL PLANTE(0)
00571           STOP
00572         ENDIF
00573 !
00574 !-----------------------------------------------------------------------
00575 !
00576       ELSEIF(OP(1:8).EQ.'X=X+TAY ') THEN
00577 !
00578 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00579 !
00580         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00581 !
00582           DO IELEM = 1 , NELEM
00583             W1(IELEM) = W1(IELEM) + XA21(IELEM) * Y(IKLE2(IELEM))
00584      &                            + XA31(IELEM) * Y(IKLE3(IELEM))
00585      &                            + XA41(IELEM) * Y(IKLE4(IELEM))
00586             W2(IELEM) = W2(IELEM) + XA12(IELEM) * Y(IKLE1(IELEM))
00587      &                            + XA32(IELEM) * Y(IKLE3(IELEM))
00588      &                            + XA42(IELEM) * Y(IKLE4(IELEM))
00589             W3(IELEM) = W3(IELEM) + XA13(IELEM) * Y(IKLE1(IELEM))
00590      &                            + XA23(IELEM) * Y(IKLE2(IELEM))
00591      &                            + XA43(IELEM) * Y(IKLE4(IELEM))
00592             W4(IELEM) = W4(IELEM) + XA14(IELEM) * Y(IKLE1(IELEM))
00593      &                            + XA24(IELEM) * Y(IKLE2(IELEM))
00594      &                            + XA34(IELEM) * Y(IKLE3(IELEM))
00595           ENDDO ! IELEM
00596 !
00597         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00598 !
00599           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00600           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00601           CALL PLANTE(0)
00602           STOP
00603 !
00604         ENDIF
00605 !
00606 !   CONTRIBUTION OF THE DIAGONAL
00607 !
00608         IF(TYPDIA(1:1).EQ.'Q') THEN
00609           CALL OV ('X=X+YZ  ', X , Y , DA , C , NPOIN )
00610         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00611           CALL OV ('X=X+Y   ', X , Y , Z  , C  , NPOIN )
00612         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00613           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00614           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00615           CALL PLANTE(0)
00616           STOP
00617         ENDIF
00618 !
00619 !-----------------------------------------------------------------------
00620 !
00621       ELSEIF(OP(1:8).EQ.'X=X-TAY ') THEN
00622 !
00623 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00624 !
00625         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00626 !
00627           DO IELEM = 1 , NELEM
00628             W1(IELEM) = W1(IELEM) - XA21(IELEM) * Y(IKLE2(IELEM))
00629      &                            - XA31(IELEM) * Y(IKLE3(IELEM))
00630      &                            - XA41(IELEM) * Y(IKLE4(IELEM))
00631             W2(IELEM) = W2(IELEM) - XA12(IELEM) * Y(IKLE1(IELEM))
00632      &                            - XA32(IELEM) * Y(IKLE3(IELEM))
00633      &                            - XA42(IELEM) * Y(IKLE4(IELEM))
00634             W3(IELEM) = W3(IELEM) - XA13(IELEM) * Y(IKLE1(IELEM))
00635      &                            - XA23(IELEM) * Y(IKLE2(IELEM))
00636      &                            - XA43(IELEM) * Y(IKLE4(IELEM))
00637             W4(IELEM) = W4(IELEM) - XA14(IELEM) * Y(IKLE1(IELEM))
00638      &                            - XA24(IELEM) * Y(IKLE2(IELEM))
00639      &                            - XA34(IELEM) * Y(IKLE3(IELEM))
00640           ENDDO ! IELEM
00641 !
00642         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00643 !
00644           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00645           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00646           CALL PLANTE(0)
00647           STOP
00648 !
00649         ENDIF
00650 !
00651 !   CONTRIBUTION OF THE DIAGONAL
00652 !
00653         IF(TYPDIA(1:1).EQ.'Q') THEN
00654           CALL OV ('X=X-YZ  ', X , Y , DA , C , NPOIN )
00655         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00656           CALL OV ('X=X-Y   ', X , Y , Z  , C  , NPOIN )
00657         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00658           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00659           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00660           CALL PLANTE(0)
00661           STOP
00662         ENDIF
00663 !
00664 !-----------------------------------------------------------------------
00665 !
00666       ELSEIF(OP(1:8).EQ.'X=X+CTAY') THEN
00667 !
00668 !   CONTRIBUTION OF EXTRADIAGONAL TERMS:
00669 !
00670         IF(TYPEXT(1:1).EQ.'Q'.OR.TYPEXT(1:1).EQ.'S') THEN
00671 !
00672           DO IELEM = 1 , NELEM
00673             W1(IELEM) = W1(IELEM)
00674      &                + C * (    + XA21(IELEM) * Y(IKLE2(IELEM))
00675      &                           + XA31(IELEM) * Y(IKLE3(IELEM))
00676      &                           + XA41(IELEM) * Y(IKLE4(IELEM)) )
00677             W2(IELEM) = W2(IELEM)
00678      &                + C * (    + XA12(IELEM) * Y(IKLE1(IELEM))
00679      &                           + XA32(IELEM) * Y(IKLE3(IELEM))
00680      &                           + XA42(IELEM) * Y(IKLE4(IELEM)) )
00681             W3(IELEM) = W3(IELEM)
00682      &                + C * (    + XA13(IELEM) * Y(IKLE1(IELEM))
00683      &                           + XA23(IELEM) * Y(IKLE2(IELEM))
00684      &                           + XA43(IELEM) * Y(IKLE4(IELEM)) )
00685             W4(IELEM) = W4(IELEM)
00686      &                + C * (    + XA14(IELEM) * Y(IKLE1(IELEM))
00687      &                           + XA24(IELEM) * Y(IKLE2(IELEM))
00688      &                           + XA34(IELEM) * Y(IKLE3(IELEM)) )
00689           ENDDO ! IELEM
00690 !
00691         ELSEIF(TYPEXT(1:1).NE.'0') THEN
00692 !
00693           IF (LNG.EQ.1) WRITE(LU,1000) TYPEXT
00694           IF (LNG.EQ.2) WRITE(LU,1001) TYPEXT
00695           CALL PLANTE(0)
00696           STOP
00697 !
00698         ENDIF
00699 !
00700 !   CONTRIBUTION OF THE DIAGONAL
00701 !
00702         IF(TYPDIA(1:1).EQ.'Q') THEN
00703           CALL OV ('X=X+CYZ ', X , Y , DA , C , NPOIN )
00704         ELSEIF(TYPDIA(1:1).EQ.'I') THEN
00705           CALL OV ('X=X+CY  ', X , Y , Z  , C  , NPOIN )
00706         ELSEIF(TYPDIA(1:1).NE.'0') THEN
00707           IF (LNG.EQ.1) WRITE(LU,2000) TYPDIA
00708           IF (LNG.EQ.2) WRITE(LU,2001) TYPDIA
00709           CALL PLANTE(0)
00710           STOP
00711         ENDIF
00712 !
00713 !-----------------------------------------------------------------------
00714 !
00715       ELSE
00716 !
00717         IF (LNG.EQ.1) WRITE(LU,3000) OP
00718         IF (LNG.EQ.2) WRITE(LU,3001) OP
00719         CALL PLANTE(0)
00720         STOP
00721 !
00722 !-----------------------------------------------------------------------
00723 !
00724       ENDIF
00725 !
00726 !-----------------------------------------------------------------------
00727 !
00728       RETURN
00729 !
00730 1000  FORMAT(1X,'MV0404 (BIEF) : TERMES EXTRADIAG. TYPE INCONNU: ',A1)
00731 1001  FORMAT(1X,'MV0404 (BIEF) : EXTRADIAG. TERMS  UNKNOWN TYPE : ',A1)
00732 2000  FORMAT(1X,'MV0404 (BIEF) : DIAGONALE : TYPE INCONNU: ',A1)
00733 2001  FORMAT(1X,'MV0404 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',A1)
00734 3000  FORMAT(1X,'MV0404 (BIEF) : OPERATION INCONNUE : ',A8)
00735 3001  FORMAT(1X,'MV0404 (BIEF) : UNKNOWN OPERATION : ',A8)
00736 !
00737 !-----------------------------------------------------------------------
00738 !
00739       END

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