!
SUBROUTINE recurfilt_3d_scale(nx,ny,nz,pgrd,ipass_filt,hradius,nradius_z) 1,3
!cc
!cc
IMPLICIT none
INTEGER :: i,j,k,n
INTEGER :: nx,ny,nz,ipass_filt,nradius_z
REAL :: hradius
REAL :: alpha, alpha_z, ee
REAL :: pgrd(nx,ny,nz)
REAL, DIMENSION(:), allocatable :: temx
REAL, DIMENSION(:), allocatable :: temy
REAL, DIMENSION(:), allocatable :: temz
!
IF(hradius == 0 .and. nradius_z == 0 ) return
!
allocate ( temx(nx) )
allocate ( temy(ny) )
allocate ( temz(nz) )
!
!
ee = REAL(ipass_filt) /(hradius*hradius)
alpha = 1+ee-SQRT( ee*(ee+2.) )
!
IF( nradius_z /= 0 ) THEN
ee = REAL (ipass_filt) / REAL (nradius_z* nradius_z)
alpha_z = 1 + ee - SQRT (ee*(ee+2.))
ENDIF
!
!
DO n = 1, ipass_filt
!
!
DO k = 1, nz
DO j = 1, ny
DO i = 1, nx
temx(i) = pgrd(i,j,k)
END DO
!
CALL recurfilt_1d
( temx,nx,alpha,n )
!
DO i = 1, nx
pgrd(i,j,k) = temx(i)
END DO
END DO
END DO
!
!
DO k = 1, nz
DO i = 1, nx
DO j = 1, ny
temy(j) = pgrd(i,j,k)
END DO
!
CALL recurfilt_1d
( temy,ny,alpha,n )
!
DO j = 1, ny
pgrd(i,j,k) = temy(j)
END DO
!
END DO
!
END DO
!
!
IF( nradius_z /= 0 ) THEN
DO i = 1, nx
DO j = 1, ny
DO k = 1, nz
temz(k) = pgrd(i,j,k)
END DO
!
CALL recurfilt_1d
( temz,nz,alpha_z,n )
!
DO k = 1, nz
pgrd(i,j,k) = temz(k)
END DO
END DO
END DO
ENDIF
!
END DO
!
!
deallocate (temx)
deallocate (temy)
deallocate (temz)
!
!
RETURN
END SUBROUTINE recurfilt_3d_scale