! 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