C BJO2      SOURCE    CHAT      05/01/12    21:40:22     5004
       SUBROUTINE BJO2(IGAU,MFR,IFOU,NIFOU,XEL,BPSS,SHPTOT,SHP,
     .                                   BGENE,DJAC,IRRT)
C=======================================================================
C
C     CALCUL DE LA MATRICE B = TETA * ( N , -N )
C     ET DU JACOBIEN EN IGAU POUR UN JOINT 2D
C          ROUTINE FORTRAN PUR
C          CODE S. FELIX MAI 92
C=======================================================================
C  INPUT
C     IGAU  = NUMERO DU POINT DE GAUSS
C     MFR   = NUMERO DE LA FORMULATION
C     XEL   = COORDONNEES DES NOEUDS DE L'ELEMENT
C     BPSS  = MATRICE DE PASSAGE
C             BPSS(,) = AXE S1
C             BPSS(,) = AXE SN
C     SHPTOT= FONCTIONS DE FORME ET DERIVEES DANS L'ESPACE DE REFERENCE
C             SHPTOT(1, ) = FONCTION DE FORME
C             SHPTOT(2, ) = DERIVEES PAR RAPPORT A QSI
C             SHPTOT(3, ) = DERIVEES PAR RAPPORT A ETA
C  OUTPUT
C     SHP   = FONCTIONS DE FORME ET DERIVEES DANS L'ESPACE GEOMETRIQUE
C             SHP(1, ) = FONCTION DE FORME
C             SHP(2, ) = DERIVEES PAR RAPPORT A X LOCAL
C             SHP(3, ) = DERIVEES PAR RAPPORT A Y LOCAL
C     DJAC  = JACOBIEN AU POINT D'INTEGRATION IGAU
C     BGENE = MATRICE B AU POINT D'INTEGRATION IGAU
C     IRRT  = DIFFERENT DE ZERO SI ERREUR
C  CONSTANTES
C     NBNO  = NOMBRE DE NOEUDS
C     LRE   = NOMBRE DE COLONNES DE LA MATRICE B
C     NST   = NOMBRE DE COMPOSANTES DE CONTRAINTES
C
C  REMARQUE : CE SOUS-PROGRAMME EST VALABLE EN CONTRAINTES PLANES,
C             DEFORMATIONS PLANES ET AXISYMETRIQUES. LA MATRICE
C                     BGENE = TETA ( Ntop , - Nbot )
C             EST UNE MATRICE (2x8). EN EFFET, TETA EST UNE MATRICE
C             (2x2), ET ( Ntop , - Nbot ) EST UNE MATRICE (2x8).
C             LA MATRICE TETA EST ICI APPELEE BPSS.
C
C=======================================================================
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      PARAMETER (LRE=8,NST=2,NBNO=4)
      DIMENSION XEL(3,*),BGENE(NST,*),SHP(6,*),SHPTOT(6,NBNO,*)
      DIMENSION BPSS(3,3)
C
      IRRT = 0
C
C     MATRICE JACOBIENNE
C
      DO 1 I=1,NBNO
       SHP(1,I) = SHPTOT(1,I,IGAU)
       SHP(2,I) = SHPTOT(2,I,IGAU)
    1 CONTINUE
C
C !!!!!! ATTENTION : IL FAUT CALCULER LE JACOBIEN AVEC NBNO=2 !!!!!!
C        IL NE FAUT SURTOUT PAS METTRE NBNO=4 CAR CA FAUSSE ALORS
C        LES RESULTATS ... NBNO DOIT ETRE EGAL A 4 CAR IL YA 4 NOEUDS
C
      NBNONN=NBNO/2
      CALL DEVOLU(XEL,SHP,MFR,NBNONN,IFOU,NIFOU,1,1.D0,RR,DJAC)

      IF (DJAC.LT.0.0D0) THEN
         IRRT = 1
      ELSE IF (DJAC.EQ.0.0D0) THEN
         IRRT = 2
      ENDIF
C
C     MATRICE B
C
C PP ATTENTION: IL FAUT PEUT-ETRE RESPECTER LA NUMEROTATION LOCALE DES
C               NOEUDS
C
      CALL ZERO(BGENE,NST,LRE)
      DO 2 I=1,2
       DO 3 J=1,2
        DO 4 K=1,2
         L=2*(J-1)+K
C PP     M=L+4
         M=L+2*(2*(2-J)+1)
         BGENE(I,L)=BPSS(I,K)*SHP(1,J)
         BGENE(I,M)=-BGENE(I,L)
    4   CONTINUE
    3  CONTINUE
    2 CONTINUE
C
      RETURN
      END


