<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hello, in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947885#M15028</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;For backward transform, you are setting the DFTI_REAL_REAL, DFTI_REAL_REAL is only used store the real data:&lt;BR /&gt;DftiSetValue(FFT_HANDLE,DFTI_REAL_STORAGE, DFTI_REAL_REAL)&lt;/P&gt;
&lt;P&gt;You can use DFTI_CONJUGATE_EVEN_STORAGE, storage, Yin set the same data as the Yout:&lt;/P&gt;
&lt;P&gt;You can check this article for some example: &lt;BR /&gt;&lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-0E5501C5-30C5-413F-BD13-FC45CBC2884A.htm"&gt;http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-0E5501C5-30C5-413F-BD13-FC45CBC2884A.ht&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thanks,&lt;BR /&gt;Chao&lt;/P&gt;</description>
    <pubDate>Fri, 12 Jul 2013 03:14:30 GMT</pubDate>
    <dc:creator>Chao_Y_Intel</dc:creator>
    <dc:date>2013-07-12T03:14:30Z</dc:date>
    <item>
      <title>2D FFT on 4D data real to complex and backward</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947884#M15027</link>
      <description>&lt;P&gt;Please can I ask for help with the 2D transform on 4D data? I have an array theta(x,y,dz,z) and need to do to the FFT over x and y, I have written for this an test code:&lt;/P&gt;
&lt;P&gt;real :: Xin(x,y), Xout(x*y)&lt;BR /&gt;complex :: Yin(x,y), Yout(x*y)&lt;/P&gt;
&lt;P&gt;dxT =&amp;nbsp; x/2 + 1&lt;BR /&gt;L(1) = x&lt;BR /&gt;L(2) = y&lt;BR /&gt;strides_out(1) = 0&lt;BR /&gt;strides_out(2) = 1&lt;BR /&gt;strides_out(3) = dxT&lt;BR /&gt;&lt;BR /&gt;do i=1,dz&lt;BR /&gt;&amp;nbsp; do j = 1,z&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xin = theta(:,:,i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiCreateDescriptor( FFT_HANDLE, DFTI_SINGLE,DFTI_REAL, 2, L )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue(FFT_HANDLE,DFTI_CONJUGATE_EVEN_STORAGE, DFTI_COMPLEX_COMPLEX)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue( FFT_HANDLE, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue(FFT_HANDLE, DFTI_OUTPUT_STRIDES, strides_out)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiCommitDescriptor(FFT_HANDLE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiComputeForward(FFT_HANDLE, Xin(:,1), Yout)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do k=1,dxT&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do l=1,y&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;thetaFFT(k,l) = Yout(k + (l-1)*dxT)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(k&amp;gt;1) thetaFFT(x+2-k,l) = conjg(thetaFFT(k,l))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiFreeDescriptor(FFT_HANDLE)&lt;BR /&gt;&amp;nbsp; enddo&lt;BR /&gt;enddo&lt;BR /&gt;&lt;BR /&gt;!*************************************************************************** &lt;BR /&gt;! Backward&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;L(1) = x&lt;BR /&gt;L(2) = y&lt;BR /&gt;strides_out(1) = 0&lt;BR /&gt;strides_out(2) = 1&lt;BR /&gt;strides_out(3) = x&lt;BR /&gt;&lt;BR /&gt;do i=1,dz&lt;BR /&gt;&amp;nbsp; do j = 1,z&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Yin = thetaFFT(:,:,i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiCreateDescriptor( FFT_HANDLE, DFTI_SINGLE,DFTI_REAL, 2, L )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue(FFT_HANDLE,DFTI_REAL_STORAGE, DFTI_REAL_REAL)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue( FFT_HANDLE, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiSetValue(FFT_HANDLE, DFTI_OUTPUT_STRIDES, strides_out)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiCommitDescriptor(FFT_HANDLE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiComputeBackward(FFT_HANDLE, Yin(:,1), Xout)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do k=1,x&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do l=1,y&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;theta(k,l) = Xout(ix + (l-1)*dxT)/(x*y)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StatusExp = DftiFreeDescriptor(FFT_HANDLE)&lt;BR /&gt;&amp;nbsp; enddo&lt;BR /&gt;enddo&lt;/P&gt;
&lt;P&gt;Why I don't get my testing array theta back when running this routine?&lt;BR /&gt;I send theta = 1., procedure with it forward and backward FFt and get back a theta containing random numbers about 2. What's wrong?&lt;/P&gt;
&lt;P&gt;Many thanks for any idea&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jul 2013 20:12:41 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947884#M15027</guid>
      <dc:creator>the_t_1</dc:creator>
      <dc:date>2013-07-11T20:12:41Z</dc:date>
    </item>
    <item>
      <title>Hello,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947885#M15028</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;For backward transform, you are setting the DFTI_REAL_REAL, DFTI_REAL_REAL is only used store the real data:&lt;BR /&gt;DftiSetValue(FFT_HANDLE,DFTI_REAL_STORAGE, DFTI_REAL_REAL)&lt;/P&gt;
&lt;P&gt;You can use DFTI_CONJUGATE_EVEN_STORAGE, storage, Yin set the same data as the Yout:&lt;/P&gt;
&lt;P&gt;You can check this article for some example: &lt;BR /&gt;&lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-0E5501C5-30C5-413F-BD13-FC45CBC2884A.htm"&gt;http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-0E5501C5-30C5-413F-BD13-FC45CBC2884A.ht&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Thanks,&lt;BR /&gt;Chao&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jul 2013 03:14:30 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947885#M15028</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2013-07-12T03:14:30Z</dc:date>
    </item>
    <item>
      <title>Hi the t,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947886#M15029</link>
      <description>&lt;P&gt;Hi the t,&lt;/P&gt;
&lt;P&gt;Conjugate-even symmetry of the result of the first transform should be employed by this:&lt;/P&gt;
&lt;P&gt;thetaFFT(x+2-k,y+2-l) = conjg(thetaFFT(k,l))&lt;/P&gt;
&lt;P&gt;Thanks&lt;BR /&gt;Dima&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jul 2013 11:26:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947886#M15029</guid>
      <dc:creator>Dmitry_B_Intel</dc:creator>
      <dc:date>2013-07-12T11:26:17Z</dc:date>
    </item>
    <item>
      <title>Many thanks, Chao and Dima,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947887#M15030</link>
      <description>&lt;P&gt;Many thanks, Chao and Dima,&lt;/P&gt;
&lt;P&gt;I have implemented your advices but it still didn't work. So I have written a very simple code and have found, that when I compute tha Forward and Backward in one loop, it works. But not, when I close the loop and open new! But I need to compute the whole theta(x,y,dz,z) and do some algebra with it and then finally convert it back to direct space. So I need to close the loops..&lt;BR /&gt;Here is the program which works properly:&lt;/P&gt;
&lt;P&gt;! first, theta is filled with random numbers, symbolically:&lt;BR /&gt;! theta = rand()&lt;/P&gt;
&lt;P&gt;L(1) = dx&lt;BR /&gt;L(2) = dy&lt;BR /&gt;strides_out(1) = 0&lt;BR /&gt;strides_out(2) = 1&lt;BR /&gt;strides_out(3) = dx&lt;BR /&gt;do i=1,idz&lt;BR /&gt;&amp;nbsp; do j=1,iz&lt;BR /&gt;&amp;nbsp; xy_data = cmplx(theta(:,:,i,j),0)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCreateDescriptor(hand, DFTI_DOUBLE, DFTI_COMPLEX, 2, L)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCommitDescriptor(hand)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_OUTPUT_STRIDES, strides_out) &amp;nbsp;&lt;BR /&gt;&amp;nbsp; StatusExp = DftiComputeForward(hand, xy_data(:,1), lambda_data(:,1))&lt;BR /&gt;&amp;nbsp; thetaFFT(:,:,i,j) = lambda_data&lt;BR /&gt;&amp;nbsp; StatusExp = DftiFreeDescriptor(hand)&lt;BR /&gt;!&amp;nbsp; enddo&lt;BR /&gt;!enddo&lt;BR /&gt;&lt;BR /&gt;!do i=1,idz&lt;BR /&gt;!&amp;nbsp; do j=1,iz&lt;BR /&gt;&amp;nbsp; lambda_data = thetaFFT(:,:,i,j)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCreateDescriptor(hand, DFTI_DOUBLE, DFTI_COMPLEX, 2, L)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCommitDescriptor(hand)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_OUTPUT_STRIDES, strides_out) &lt;BR /&gt;&amp;nbsp; StatusExp = DftiComputeBackward(hand, lambda_data(:,1), xy_data(:,1))&lt;BR /&gt;&amp;nbsp; theta_new(:,:,i,j) = real(xy_data)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiFreeDescriptor(hand)&lt;BR /&gt;&amp;nbsp; enddo&lt;BR /&gt;enddo&lt;/P&gt;
&lt;P&gt;But if I uncomment the part in the middle,&lt;/P&gt;
&lt;P&gt;do i=1,idz&lt;BR /&gt;&amp;nbsp; do j=1,iz&lt;BR /&gt;&amp;nbsp; xy_data = cmplx(theta(:,:,i,j),0)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCreateDescriptor(hand, DFTI_DOUBLE, DFTI_COMPLEX, 2, L)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCommitDescriptor(hand)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_OUTPUT_STRIDES, strides_out) &amp;nbsp;&lt;BR /&gt;&amp;nbsp; StatusExp = DftiComputeForward(hand, xy_data(:,1), lambda_data(:,1))&lt;BR /&gt;&amp;nbsp; thetaFFT(:,:,i,j) = lambda_data&lt;BR /&gt;&amp;nbsp; StatusExp = DftiFreeDescriptor(hand)&lt;BR /&gt;&amp;nbsp; enddo&lt;BR /&gt;enddo&lt;BR /&gt;&lt;BR /&gt;do i=1,idz&lt;BR /&gt;&amp;nbsp; do j=1,iz&lt;BR /&gt;&amp;nbsp; lambda_data = thetaFFT(:,:,i,j)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCreateDescriptor(hand, DFTI_DOUBLE, DFTI_COMPLEX, 2, L)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiCommitDescriptor(hand)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_PLACEMENT, DFTI_NOT_INPLACE )&lt;BR /&gt;&amp;nbsp; StatusExp = DftiSetValue( hand, DFTI_OUTPUT_STRIDES, strides_out) &lt;BR /&gt;&amp;nbsp; StatusExp = DftiComputeBackward(hand, lambda_data(:,1), xy_data(:,1))&lt;BR /&gt;&amp;nbsp; theta_new(:,:,i,j) = real(xy_data)&lt;BR /&gt;&amp;nbsp; StatusExp = DftiFreeDescriptor(hand)&lt;BR /&gt;&amp;nbsp; enddo&lt;BR /&gt;enddo&lt;/P&gt;
&lt;P&gt;This code doesn't work (the final theta_new is not equal to input theta). I fill the theta field with random numbers. Hovewer, if I fill it with all 1, it works...&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jul 2013 14:07:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947887#M15030</guid>
      <dc:creator>the_t_1</dc:creator>
      <dc:date>2013-07-12T14:07:00Z</dc:date>
    </item>
    <item>
      <title>I have tried now to do the</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947888#M15031</link>
      <description>&lt;P&gt;I have tried now to do the same with the example codes in MKL directory (basic_dp_real_dft_3d.f90) and have realized that changing the &lt;BR /&gt;call init... to&lt;/P&gt;
&lt;P&gt;&amp;nbsp;i = time()&lt;BR /&gt;&amp;nbsp; call seed(i)&lt;BR /&gt;&amp;nbsp; do i=1, N1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1, N2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do k=1, N3&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;x_real(i,j,k) = rand()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp; enddo&lt;/P&gt;
&lt;P&gt;does the same like my own code - the results are not the same. Maybe is this a property of function rand()? But I don't understand, how this may be explained.&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jul 2013 14:41:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947888#M15031</guid>
      <dc:creator>the_t_1</dc:creator>
      <dc:date>2013-07-12T14:41:00Z</dc:date>
    </item>
    <item>
      <title>The 'program which works</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947889#M15032</link>
      <description>&lt;P&gt;The 'program which works properly' is not supposed to do so, because it changes the descriptor after it has been committed.&lt;/P&gt;
&lt;P&gt;The sequence of steps when using DFTI is this: create a descriptor, optionally set configuration in the descriptor, commit the descriptor and check the status returned by the commit function. Then the descriptor can be used to compute the FFT arbitrary number of times. Finally free the descriptor. Please refer to &lt;A href="http://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mklman/GUID-D844F46D-3C4D-43CD-95E1-AB76F8A21BAE.htm"&gt;documentation&lt;/A&gt;.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Jul 2013 03:52:55 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/2D-FFT-on-4D-data-real-to-complex-and-backward/m-p/947889#M15032</guid>
      <dc:creator>Dmitry_B_Intel</dc:creator>
      <dc:date>2013-07-15T03:52:55Z</dc:date>
    </item>
  </channel>
</rss>

