mv0303.f

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

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