mvseg.f

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

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