如何配置MKL的MKL_DFTI来计算FFT(f90接口)
请问:如何在ivf中配置MKL来调用f90接口,如调用fft程序?具体如何配置,是否需要安装mkl才能使用f90接口?使用的是vs10+ivf2011。以下代码仅举例
你需要在工程属性里修改 library 使用 MKL 库
项目(或工程菜单),属性,然后按图设置:
Module MKL_FFT !// 以下代码复制粘贴,直接使用
Use MKL_DFTI
private
Type , public :: CLS_FFT
type(DFTI_DESCRIPTOR), Pointer :: h => NULL()
Integer :: Err
contains
Procedure :: Create
Procedure :: Forward
Procedure :: Backward
Procedure :: Destory
End Type CLS_FFT
contains
Subroutine Create( this , N )
class( CLS_FFT ) :: this
Integer , Intent( IN ) :: N
this%Err = DftiCreateDescriptor( this%h , DFTI_SINGLE , DFTI_REAL , 1 , N )
this%Err = DftiSetValue( this%h , DFTI_PLACEMENT , DFTI_NOT_INPLACE )
this%Err = DftiCommitDescriptor( this%h )
End Subroutine Create
Function Forward( this , X ) result( F )
class( CLS_FFT ) :: this
Real :: X(:)
Complex :: F( size(X)/2+1 )
this%Err = DftiComputeForward( this%h , X , F )
End Function Forward
Function Backward( this , X ) result( T )
class( CLS_FFT ) :: this
Complex :: X(:)
Real :: T( size(X)*2-1 )
this%Err = DftiComputeBackward( this%h , X , T )
End Function Backward
Subroutine Destory( this )
class( CLS_FFT ) :: this
this%Err = DftiFreeDescriptor( this%h )
End Subroutine Destory
End Module MKL_FFT
!// 以上代码复制粘贴,直接使用
Program Test_FFT
use MKL_FFT !// 这句代码必须 *************
Type( CLS_FFT ) :: FFT !// 这句定义一个 FFT 的过程 ************
Integer , parameter :: N = 30 !//不需要2^k 次方整幂
Real :: r(N) = & !// 时间域
Complex:: f(N/2+1) !// 频率域,为复数,大小为 n/2 + 1
call FFT%Create( N ) !// 创建FFT过程。N 是 FFT 的点数 ************
f= FFT%Forward( r )!// 正向 FFT 变换*************
Do i = 1 , size(f)
Write( * , * ) i , f( i ) !// 输出频率域
End Do
r = FFT%Backward( f ) / n !// 这一句可以做反傅氏变换 *************
call FFT%Destory() !// 销毁 FFT 过程*************
Do i = 1 , size(r)
Write( * , * ) i , r(i) !// 输出反变换
End Do
Read(*,*)
End Program Test_FFT
你好,看到比较晚。测试了一下,出现如下错误:error #6457: This derived type name has not been declared. 。
问题貌似是需要进行别的设置,请多指点。 Module MKL_FFT !// 以下代码复制粘贴,直接使用Use MKL_DFTI
这里少了一个回车
应该是
Module MKL_FFT !// 以下代码复制粘贴,直接使用
Use MKL_DFTI
出现如下错误:Error in opening the compiled module file.Check INCLUDE paths. 。
我在‘初学’群里请教过这个问题,fcode的群主说是应该注意配置include,不知道应该怎么配置,请指点。 你需要把MKL安装目录下的 MKL_DFTI.f90 文件加入工程。
有更多问题,在fcode群里问吧,2338021
fcode 发表于 2016-11-22 17:03
以下代码仅举例
你需要在工程属性里修改 library 使用 MKL 库
项目(或工程菜单),属性,然后按图设置:
您好, 我用IVF可以正确编译, 但是用VB6调用DLL的时候就提示找不到文件
我对比了一下没有使用use mkl_dfti的情况下, 只缺少IMSLMKL_DLL.DLL和MKL_INTEL_THREAD.DLL两个文件. 但是把这2个文件不管放在哪里都不行. 不知道应该怎样处理, 请指教, 谢谢 fcode 发表于 2016-11-28 11:36
Module MKL_FFT !// 以下代码复制粘贴,直接使用Use MKL_DFTI
这里少了一个回车
应该是
您好,使用MKL完成FFT的过程中,运行了帖子http://bbs.fcode.cn/forum.php?mod=viewthread&tid=1128&highlight=MKL%5C_DFTI中的测试程序,输出结果中频率域,16个f实部虚部皆为0,30个r也与程序中输入的r完全不同, r中多个值为-3579139。请教一下您,感谢反馈。 已解决!谢谢提供算例~ tintin2005 发表于 2022-8-11 16:00
已解决!谢谢提供算例~
你好同学,我也遇到了和你一样的问题,两次傅里叶变换后结果与输入不符,请问你最后是改了程序的哪些地方呀,希望能学习一下
页:
[1]
2