C DEVEQ8    SOURCE    BP208322  18/12/20    21:15:29     10048          
C
      SUBROUTINE DEVEQ8(Q2,NA1,XM,PDT,NPAS,FTOTA,FAMOR,
     &              XOPM1,NB1,NB1M)
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
*--------------------------------------------------------------------*
*                                                                    *
*     Operateur DYNE : algorithme de Fu - de Vogelaere               *
*     ________________________________________________               *
*                                                                    *
*     Calcul des vitesses generalisees pour le second demi-pas       *
*     de temps.                                                      *
*                                                                    *
*     Param}tres:                                                    *
*                                                                    *
* es  Q2(.,.) Vecteur des vitesses generalisees                      *
* e   NA1     Nombre total d'inconnues dans la base A                *
* e   XM      Vecteur des masses generalisees                        *
* e   PDT     pas de temps                               *
* e   NPAS    Numero du pas de temps                                 *
* e   FTOTA   Forces exterieures totalisees, sur la base A           *
*                                                                    *
*     Auteur, date de creation:                                      *
*     Benoit PRABEL, 16/02/2015                                      *
*                                                                    *
*--------------------------------------------------------------------*
      REAL*8 Q2(NA1,*)
      REAL*8 XM(NA1,*),FTOTA(NA1,*)
      REAL*8 XOPM1(NB1,NB1,*),FAMOR(NA1,*),F2ND(NA1)
*
      PDTS6 = PDT / 6.D0
*
*     .
*     Q        = [6 + dt M^-1 C]^-1 *
*      i,m+1
*                        .
*                    ( 6 Q    + h M^-1 ( F      + 4 F       + F
*                         i,m             i,m+1      i,m+1/2   i,m
*
*                        .          .
*              - C   ( 4 Q        + Q    ) ) )
*                 ij      j,m+1/2    j,m
*

C     CALCUL DU 2ND MEMBRE

C     MATRICE M PLEINE
      IF(NB1M.GT.1) THEN

        DO 31 IA=1,NA1
          AUX = 0.D0
          DO 32 IB=1,NB1
            AUX = AUX + XOPM1(IA,IB,3)
     &      * ( FTOTA(IB,1) + 4.D0*(FTOTA(IB,2)-FAMOR(IB,2))
     &                      +       FTOTA(IB,3)-FAMOR(IB,3) )
 32       CONTINUE
          F2ND(IA) = 6.D0*Q2(IA,3) + PDT*AUX
 31     CONTINUE


C     MATRICE M DIAGO
      ELSE

        DO 30 I=1,NA1
           F2ND(I) =  (6.D0*Q2(I,3)) + ( PDT
     &     * ( FTOTA(I,1) + 4.D0*(FTOTA(I,2)-FAMOR(I,2))
     &                    +       FTOTA(I,3)-FAMOR(I,3) )/XM(I,1))
 30     CONTINUE

      ENDIF

C     MATRICE M ou C PLEINE
      DO 10 IA = 1,NA1
         Q2(IA,1) = 0.D0
      DO 10 IB = 1,NB1
         Q2(IA,1) = Q2(IA,1) + (XOPM1(IA,IB,2)*F2ND(IB))
 10   CONTINUE


      END




 
 
