*     G03BDF Example Program Text
*     Mark 22 Release. NAG Copyright 2008.
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        (NIN=5,NOUT=6)
      INTEGER          NMAX, MMAX
      PARAMETER        (NMAX=44,MMAX=11)
*     .. Local Scalars ..
      DOUBLE PRECISION POWER
      INTEGER          I, IFAIL, J, LDFP, LDFS, LDPHI, LDR, LDRO, LDX,
     +                 M, N
      CHARACTER        STAND
*     .. Local Arrays ..
      DOUBLE PRECISION FP(NMAX,MMAX), FS(NMAX,MMAX), PHI(MMAX,MMAX),
     +                 R(MMAX,MMAX), RO(MMAX,MMAX), X(NMAX,MMAX)
*     .. External Subroutines ..
      EXTERNAL         G03BDF, X04CAF
*     .. Executable Statements ..
      WRITE (NOUT,*) 'G03BDF Example Program Results'
*     Skip heading in data file
      READ (NIN,*)
      READ (NIN,*) STAND, N, M, POWER
      IF (N.GT.NMAX .OR. M.GT.MMAX) THEN
         WRITE (NOUT,99998)
         GO TO 60
      END IF
      LDX = NMAX
      LDRO = MMAX
      LDFP = NMAX
      LDFS = NMAX
      LDR = MMAX
      LDPHI = MMAX
*     Read orthognal loadings matrix.
      DO 20 I = 1, N
         READ (NIN,*) (X(I,J),J=1,M)
   20 CONTINUE
*     Read orthogonal rotation matrix.
      DO 40 I = 1, M
         READ (NIN,*) (RO(I,J),J=1,M)
   40 CONTINUE
*
      IFAIL = 1
      CALL G03BDF(STAND,N,M,X,LDX,RO,LDRO,POWER,FP,LDFP,R,LDR,PHI,LDPHI,
     +            FS,LDFS,IFAIL)
      IF (IFAIL.NE.0) THEN
         WRITE (NOUT,99999) IFAIL
         GO TO 60
      END IF
*
      WRITE (NOUT,*)
      CALL X04CAF('G','X',N,M,FP,LDFP,'Factor pattern',IFAIL)
      WRITE (NOUT,*)
      CALL X04CAF('G','X',M,M,R,LDR,'ProMax rotation',IFAIL)
      WRITE (NOUT,*)
      CALL X04CAF('G','X',M,M,PHI,LDPHI,'Inter-factor correlations',
     +            IFAIL)
      WRITE (NOUT,*)
      CALL X04CAF('G','X',N,M,FS,LDFS,'Factor structure',IFAIL)
*
   60 CONTINUE
*
99999 FORMAT (1X,/1X,' ** G03BDF returned with IFAIL = ',I5)
99998 FORMAT (1X,' ** Problem size too large, increase array limits')
      END
