C BROYDE    SOURCE    CHAT      05/01/12    21:42:40     5004
      SUBROUTINE BROYDE(QUASIN)
C
C-----------------------------------------------------
C     METHODE QN DE BROYDEN
C
C     D. Combescure, P. Pegon 14/6/95
C-----------------------------------------------------
C
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      SEGMENT,QUASIN
        REAL*8 XH0(MN,MN)
        REAL*8 WUP(MN,ITM),YUP(MN,ITM)
        INTEGER IT
        REAL*8 R(MN)
        REAL*8 D(MN),DES(MN)
      ENDSEGMENT
      DATA UN/1.D0/
C
      MN =WUP(/1)
      ITM=WUP(/2)
C
      ITM1=IT
      IT=IT+1
C
C     SI IT=0 ON FAIT UN mNR, SINON QN (sans test)
C
      IF(IT.GT.0)THEN
C
C       ON UPDATE YUP
C
        CALL MULVEC(YUP(1,IT),DES,UN,MN)
C
C       ON CALCULE DES=-H(i-1)*R(i)
C
        CALL MATVE1(XH0,R,MN,MN,DES,2)
        CALL MULVEC(DES,DES,-UN,MN)
        IF(ITM1.GT.1)THEN
          DO IE1=1,ITM1
            CC=SCVECT(YUP(1,IE1),DES,MN)
            CALL PLVECT(DES,UN,WUP(1,IE1),CC,MN,DES)
          ENDDO
        ENDIF
C
C       ON UPDATE WUP
C
        BET=SCVECT(YUP(1,IT),YUP(1,IT),MN)-SCVECT(YUP(1,IT),DES,MN)
        BET=UN/BET
        CALL MULVEC(WUP(1,IT),DES,BET,MN)
C
C       ON CALCULE DES=-H(i)*R(i)
C
        CC=SCVECT(YUP(1,IT),DES,MN)
        CALL PLVECT(DES,UN,WUP(1,IT),CC,MN,DES)
      ELSE
        CALL MATVE1(XH0,R,MN,MN,DES,2)
        CALL MULVEC(DES,DES,-UN,MN)
      ENDIF
C
C     AJOURNEMENT DE D
C
      CALL PLVECT(D,UN,DES,UN,MN,D)
C
      RETURN
      END


