*
* $Id: hmconv.F,v 1.1.1.1 1996/01/16 17:07:43 mclareni Exp $
*
* $Log: hmconv.F,v $
* Revision 1.1.1.1  1996/01/16 17:07:43  mclareni
* First import
*
*
#include "hbook/pilot.h"
*CMZ :  4.10/05 05/03/89  09.22.02  by  Rene Brun
*-- Author :
      SUBROUTINE HMCONV (N,Z,PL,R)
*.==========>
*.           INVERTS THE POSITIVE DEFINITE PACKED SYMMETRIC MATRIX Z
*.           BY THE SQUARE-ROOT METHOD
*..=========> ( D.Lienart )
      DIMENSION Z(1),PL(1),R(1)
#include "hbook/hcfit2.inc"
#include "hbook/hcprin.inc"
*
*             MAXIMUM REAL NUMBER AND 10.*MAXIMUM RELATIVE
*             PRECISION
*
      EQUIVALENCE (AM,BIGP)
      SAVE RP
      DATA RP/1.E-14/
*.___________________________________________
      IF (N.LT.1) RETURN
      APS=SQRT(AM/FLOAT(N))
      AP=1./(APS*APS)
      IR=0
      DO 11 I=1,N
   1     IR=IR+1
         IF (PL(IR).LE.0.)GO TO 1
         NI=I*(I-1)/2
         II=NI+I
         K=N+1
         IF (Z(II).LE.RP*ABS(R(IR)).OR.Z(II).LE.AP) GO TO 19
         Z(II)=1./SQRT(Z(II))
         NL=II-1
   3     IF (NL-NI.LE.0)GO TO 5
         Z(NL)=Z(NL)*Z(II)
         IF (ABS(Z(NL)).GE.APS) GO TO 16
         NL=NL-1
         GO TO 3
   5     IF (I-N.GE.0)GO TO 12
   6     K=K-1
         NK=K*(K-1)/2
         NL=NK
         KK=NK+I
         D=Z(KK)*Z(II)
         C=D*Z(II)
         L=K
   7     LL=NK+L
         LI=NL+I
         Z(LL)=Z(LL)-Z(LI)*C
         L=L-1
         NL=NL-L
         IF (L-I) 9,9,7
   8     LL=NK+L
         LI=NI+L
         Z(LL)=Z(LL)-Z(LI)*D
   9     L=L-1
         IF (L.GT.0)GO TO 8
         Z(KK)=-C
         IF (K-I-1.GT.0)GO TO 6
  11  CONTINUE
*
  12  DO 14 I=1,N
         DO 14 K=I,N
            NL=K*(K-1)/2
            D=0.
            DO 13 L=K,N
               LI=NL+I
               LK=NL+K
               D=D+Z(LI)*Z(LK)
               NL=NL+L
  13        CONTINUE
            KI=K*(K-1)/2+I
            Z(KI)=D
  14  CONTINUE
  15  RETURN
  16  K=I+NL-II
      IR=0
      DO 18 I=1,K
  17     IR=IR+1
         IF (PL(IR).LE.0.)GO TO 17
  18  CONTINUE
  19  PL(IR)=-2.
      R(IR)=0.
      INDFLG(1)=IR
      GO TO 15
      END