mv0403.f

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

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