*     G02LCF Example Program Text
*     Mark 22 Release. NAG Copyright 2008.
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
      INTEGER          MXMAX, MYMAX
      PARAMETER        (MXMAX=30,MYMAX=10)
*     .. Local Scalars ..
      DOUBLE PRECISION RCOND
      INTEGER          I, IFAIL, IP, ISCALE, J, LDB, LDC, LDOB, LDP,
     +                 LDVIP, LDW, LDYCV, MAXFAC, MY, NFACT, ORIG,
     +                 VIPOPT
*     .. Local Arrays ..
      DOUBLE PRECISION B(MXMAX,MYMAX), C(MYMAX,MXMAX),
     +                 OB(MXMAX+1,MYMAX), P(MXMAX,MXMAX),
     +                 VIP(MXMAX,MYMAX), W(MXMAX,MXMAX), XBAR(MXMAX),
     +                 XSTD(MXMAX), YBAR(MYMAX), YCV(MXMAX,MYMAX),
     +                 YSTD(MYMAX)
*     .. External Subroutines ..
      EXTERNAL         G02LCF, X04CAF
*     .. Executable Statements ..
      WRITE (NOUT,*) 'G02LCF example program results'
*     Skip header in data file
      READ (NIN,*)
*     Read data values
      READ (NIN,*) IP, MY, MAXFAC, NFACT, ORIG, ISCALE, VIPOPT
*
      IF ((IP.GT.MXMAX) .OR. (MY.GT.MYMAX) .OR. (MAXFAC.GT.MXMAX)) THEN
         WRITE (NOUT,99998)
         GO TO 20
      END IF
      LDB = MXMAX
      LDC = MYMAX
      LDW = MXMAX
      LDP = MXMAX
      LDOB = MXMAX + 1
      LDYCV = MXMAX
      LDVIP = MXMAX
*     Read P
      DO I = 1, IP
         READ (NIN,*) (P(I,J),J=1,MAXFAC)
      END DO
*     Read C
      DO I = 1, MY
         READ (NIN,*) (C(I,J),J=1,MAXFAC)
      END DO
*     Read W
      DO I = 1, IP
         READ (NIN,*) (W(I,J),J=1,MAXFAC)
      END DO
*     Read YCV
      READ (NIN,*) ((YCV(I,J),J=1,MY),I=1,MAXFAC)
*     Read means
      IF (ORIG.EQ.1) THEN
         READ (NIN,*) (XBAR(J),J=1,IP)
         READ (NIN,*) (YBAR(J),J=1,MY)
         IF (ISCALE.NE.-1) THEN
            READ (NIN,*) (XSTD(J),J=1,IP)
            READ (NIN,*) (YSTD(J),J=1,MY)
         END IF
      END IF
*     Calculate predictions
      RCOND = -1.0D0
      IFAIL = 1
      CALL G02LCF(IP,MY,MAXFAC,NFACT,P,LDP,C,LDC,W,LDW,RCOND,B,LDB,ORIG,
     +            XBAR,YBAR,ISCALE,XSTD,YSTD,OB,LDOB,VIPOPT,YCV,LDYCV,
     +            VIP,LDVIP,IFAIL)
      IF (IFAIL.NE.0) THEN
         WRITE (NOUT,99999) IFAIL
         GO TO 20
      END IF
      CALL X04CAF('G','X',IP,MY,B,LDB,'B',IFAIL)
      IF (ORIG.EQ.1) THEN
         CALL X04CAF('G','X',IP+1,MY,OB,LDOB,'OB',IFAIL)
      END IF
      IF (VIPOPT.NE.0) THEN
         CALL X04CAF('G','X',IP,VIPOPT,VIP,LDVIP,'VIP',IFAIL)
      END IF
*
   20 CONTINUE
*
99999 FORMAT (1X,/1X,' ** G02LCF returned with IFAIL = ',I5)
99998 FORMAT (1X,' ** Problem size too large, increase array limits')
      END
