subroutine fnova ( y, z, row, msize, ncls, nfctr ) c*********************************************************************72 c cc fnova c implicit none integer ncls integer nfctr integer i integer j integer k integer kl1 integer l integer msize(nfctr) integer nf integer nrnc real row(*) real y(ncls) real z(ncls) c c loop for nfctr contrast matrices. c do nf = 1, nfctr i = 1 c c get size of the matrix. c k = nfctr - nf + 1 nrnc = msize(k) do j = 1, nrnc c c row of a contrast matrix. c call arow ( row, nrnc, j ) c c perform the 'paper strip' operation for a matrix row. c do k = 1, ncls, nrnc z(i) = 0.0e+00 do l = 1, nrnc kl1 = k + l - 1 z(i) = z(i) + row(l) * y(kl1) end do i = i + 1 end do end do c c move z into y. c do j = 1, ncls y(j) = z(j) end do end do do j = 1, ncls y(j) = y(j) * y(j) end do return end subroutine arow ( row, nrnc, j ) c*********************************************************************72 c cc arow c implicit none integer nrnc real a real el integer i integer j real rj real row(nrnc) c c if row one: c if ( j == 1 ) then a = nrnc el = 1.0e+00 / sqrt ( a ) do i = 1, nrnc row(i) = el end do else rj = j a = sqrt ( rj * rj - rj ) el = 1.0e+00 / a do i = 1, j - 1 row(i) = el end do do i = j, nrnc row(i) = 0.0e+00 end do row(j) = ( 1.0e+00 - rj ) / a end if return end