|
5F 币
运行代码如下:
[Fortran] 纯文本查看 复制代码 03 | complex :: x_ 2 D ( 2 , 4 ) , y_ 2 D ( 4 , 8 ) |
05 | type ( DFTI_DESCRIPTOR ) , POINTER :: my_desc 1 |
06 | integer :: status , l ( 2 ) |
11 | x_ 2 D = reshape ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] , [ 2 , 4 ] ) |
13 | status = DftiCreateDescriptor ( my_desc 1 , DFTI_DOUBLE , DFTI_COMPLEX , 2 , l ) |
14 | status = DftiCommitDescriptor ( my_desc 1 ) |
15 | status = DftiComputeForward ( my_desc 1 , x , y ) |
16 | status = DftiFreeDescriptor ( my_desc 1 ) |
运行结果如图:
运行网页:如何配置MKL的MKL_DFTI来计算FFT(f90接口)-编程工具交流-专业Fortran论坛 - (fcode.cn) (http://bbs.fcode.cn/forum.php?mo ... ghlight=MKL%5C_DFTI)的代码时输出复数实虚部也为0。。。
结果如下:
|
最佳答案
查看完整内容
1. 你要判断一下返回值 status 是否为0,如果不是0,说明这个步骤出了错。
2. DFTI_DOUBLE 代表双精度,你需要把 complex 改为 complex(8) 才能匹配 DFTI_DOUBLE 双精度。
当然你也可以改为 DFTI_SINGLE 这样表示单精度。总之要和传入的数据匹配。
3. DftiCreateDescriptor 函数,你传入 2,l 是要做二维DFT吗?
4. 如果你不写
status = DftiSetValue( my_desc1, DFTI_PLACEMENT , DFTI_NOT_INPLACE )
这个语句,代表输出y存入x,并 ...
|