rfft_2d_forward Subroutine

public subroutine rfft_2d_forward(func)

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(inout), dimension(:,:) :: func

Calls

proc~~rfft_2d_forward~2~~CallsGraph proc~rfft_2d_forward~2 rfft_2d_forward rfft2f rfft2f proc~rfft_2d_forward~2->rfft2f rfft2i rfft2i proc~rfft_2d_forward~2->rfft2i

Called by

proc~~rfft_2d_forward~2~~CalledByGraph proc~rfft_2d_forward~2 rfft_2d_forward interface~fft2~2 fft2 interface~fft2~2->proc~rfft_2d_forward~2

Source Code

  subroutine rfft_2d_forward(func)
    real(8),dimension(:,:),intent(inout) :: func
    real(8),dimension(:),allocatable   :: wsave,work
    integer                            :: L,M,lenwrk,lensav,ldim,ier
    L      = size(func,1)
    M      = size(func,2)
    lenwrk = M*(L+1)
    lensav = L+3*M  + int(log(dble(L))/log(2.d0))+2*int(log(dble(M))/log(2.d0)) + 12
    ldim   = L
    allocate(wsave(lensav))
    allocate(work(lenwrk))
    call rfft2i(L,M,wsave,lensav,ier)
    if(ier==2)stop "rfft_2d_forward: LENSAV not big enough"
    if(ier==20)stop "rfft_2d_forward: input error returned by lower level routine"
    call rfft2f(ldim,L,M,func,wsave,lensav,work,lenwrk,ier)
    deallocate(wsave,work)
    select case(ier)
    case (0)
       return
    case (6)
       stop "rfft_2d_forward: LDIM is less than 2*INT((L+1)/2)"
    case (2)
       stop "rfft_2d_forward: LENSAV not big enough"
    case (3)
       stop "rfft_2d_forward: LENWRK not big enough"
    case (20)
       stop "rfft_2d_forward: input error returned by lower level routine"
    end select
  end subroutine rfft_2d_forward