SUBROUTINE wt1(a,isign,wtstep)
	USE nrtype; USE nrutil, ONLY : assert
	IMPLICIT NONE
	REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
	INTEGER(I4B), INTENT(IN) :: isign
	INTERFACE
		SUBROUTINE wtstep(a,isign)
		USE nrtype
		IMPLICIT NONE
		REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
		INTEGER(I4B), INTENT(IN) :: isign
		END SUBROUTINE wtstep
	END INTERFACE
	INTEGER(I4B) :: n,nn
	n=size(a)
	call assert(iand(n,n-1)==0, 'n must be a power of 2 in wt1')
	if (n < 4) RETURN
	if (isign >= 0) then
		nn=n
		do
			if (nn < 4) exit
			call wtstep(a(1:nn),isign)
			nn=nn/2
		end do
	else
		nn=4
		do
			if (nn > n) exit
			call wtstep(a(1:nn),isign)
			nn=nn*2
		end do
	end if
	END SUBROUTINE wt1