<?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 Performing split step fourier using MKL dfti in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Performing-split-step-fourier-using-MKL-dfti/m-p/1107849#M24220</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;I am trying to perform split step fourier method with the following code. There seems to be a problem with the Fourier portion because when I compare my data with the values obtained with another program, they match perfectly just until I begin the Fourier transform. Here is my code:&lt;/P&gt;

&lt;P&gt;program ss&lt;/P&gt;

&lt;P&gt;Use MKL_DFTI&lt;/P&gt;

&lt;P&gt;implicit none&lt;/P&gt;

&lt;P&gt;&amp;nbsp;real*8 , parameter :: distance = 100.0d0&lt;BR /&gt;
	&amp;nbsp;real*8 , parameter ::beta2 = 1.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: N = 1.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: nt = 1024.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: Tmax = 32.0d0&lt;BR /&gt;
	&amp;nbsp;real*8 :: step_num&lt;BR /&gt;
	&amp;nbsp;real*8 :: deltaz&lt;BR /&gt;
	&amp;nbsp;real*8 :: dtau&lt;BR /&gt;
	&amp;nbsp;real*8, dimension (1024) :: tau, omega, uu&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: pi = 3.141592653590d0&lt;BR /&gt;
	&amp;nbsp;type(DFTI_DESCRIPTOR), POINTER :: handle&lt;BR /&gt;
	&amp;nbsp;complex*16 :: hhz, C= (0,1.0d0)&lt;BR /&gt;
	&amp;nbsp;complex*16, dimension (1024):: dispersion, xy,temp,temp1,temp2&lt;BR /&gt;
	&amp;nbsp;integer :: i, status&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; step_num = 100000&lt;BR /&gt;
	&amp;nbsp; deltaz = distance/step_num&lt;BR /&gt;
	&amp;nbsp; dtau = (2.0d0*Tmax)/nt&lt;/P&gt;

&lt;P&gt;&amp;nbsp;do i = 1,1024&lt;BR /&gt;
	&amp;nbsp; tau (i) = dble(i-513)*dtau&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (i&amp;lt;=512) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omega (i) = dble(i-1)*pi/Tmax&lt;BR /&gt;
	&amp;nbsp; else&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omega (i) = dble(i-1025)*pi/Tmax&lt;BR /&gt;
	&amp;nbsp; end if&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; uu = 1/dcosh(tau)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; dispersion = exp(0.50d0*C*beta2*(omega**2)*deltaz)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; hhz = 1*(0,1.0d0)*N**2*deltaz&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp = uu*exp(abs(uu)**2*hhz/2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; status = DftiCreateDescriptor(handle, DFTI_DOUBLE,DFTI_COMPLEX,1,1024)&lt;BR /&gt;
	&amp;nbsp; status = DftiSetValue(handle,DFTI_FORWARD_SCALE,1.0d0)&lt;BR /&gt;
	&amp;nbsp; status = DftiSetValue(handle,DFTI_BACKWARD_SCALE,1/dble(1024))&lt;BR /&gt;
	&amp;nbsp; status = DftiCommitDescriptor(handle)&lt;/P&gt;

&lt;P&gt;do j=1,step_num&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;status = DftiComputeBackward(handle,temp)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;do i= 1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp1(i) = temp(i)*dispersion(i)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;end do&lt;/P&gt;

&lt;P&gt;&amp;nbsp;Status = DftiComputeForward(handle,temp1)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;do i= 1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp2(i) = temp1(i)*exp(abs(temp1(i))**2*hhz)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	end do&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;status = DftiFreeDescriptor(handle)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; xy = temp2*exp(-abs(temp1)**2*hhz/2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; do i=1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; open (10, file = 'spec.dat')&lt;BR /&gt;
	&amp;nbsp; write (10,*) tau(i), abs(xy(i)**2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	end program ss&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 16 May 2017 06:11:54 GMT</pubDate>
    <dc:creator>Nadia_A_</dc:creator>
    <dc:date>2017-05-16T06:11:54Z</dc:date>
    <item>
      <title>Performing split step fourier using MKL dfti</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Performing-split-step-fourier-using-MKL-dfti/m-p/1107849#M24220</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;

&lt;P&gt;I am trying to perform split step fourier method with the following code. There seems to be a problem with the Fourier portion because when I compare my data with the values obtained with another program, they match perfectly just until I begin the Fourier transform. Here is my code:&lt;/P&gt;

&lt;P&gt;program ss&lt;/P&gt;

&lt;P&gt;Use MKL_DFTI&lt;/P&gt;

&lt;P&gt;implicit none&lt;/P&gt;

&lt;P&gt;&amp;nbsp;real*8 , parameter :: distance = 100.0d0&lt;BR /&gt;
	&amp;nbsp;real*8 , parameter ::beta2 = 1.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: N = 1.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: nt = 1024.0d0&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: Tmax = 32.0d0&lt;BR /&gt;
	&amp;nbsp;real*8 :: step_num&lt;BR /&gt;
	&amp;nbsp;real*8 :: deltaz&lt;BR /&gt;
	&amp;nbsp;real*8 :: dtau&lt;BR /&gt;
	&amp;nbsp;real*8, dimension (1024) :: tau, omega, uu&lt;BR /&gt;
	&amp;nbsp;real*8, parameter :: pi = 3.141592653590d0&lt;BR /&gt;
	&amp;nbsp;type(DFTI_DESCRIPTOR), POINTER :: handle&lt;BR /&gt;
	&amp;nbsp;complex*16 :: hhz, C= (0,1.0d0)&lt;BR /&gt;
	&amp;nbsp;complex*16, dimension (1024):: dispersion, xy,temp,temp1,temp2&lt;BR /&gt;
	&amp;nbsp;integer :: i, status&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; step_num = 100000&lt;BR /&gt;
	&amp;nbsp; deltaz = distance/step_num&lt;BR /&gt;
	&amp;nbsp; dtau = (2.0d0*Tmax)/nt&lt;/P&gt;

&lt;P&gt;&amp;nbsp;do i = 1,1024&lt;BR /&gt;
	&amp;nbsp; tau (i) = dble(i-513)*dtau&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; if (i&amp;lt;=512) then&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omega (i) = dble(i-1)*pi/Tmax&lt;BR /&gt;
	&amp;nbsp; else&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omega (i) = dble(i-1025)*pi/Tmax&lt;BR /&gt;
	&amp;nbsp; end if&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; uu = 1/dcosh(tau)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; dispersion = exp(0.50d0*C*beta2*(omega**2)*deltaz)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; hhz = 1*(0,1.0d0)*N**2*deltaz&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp = uu*exp(abs(uu)**2*hhz/2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; status = DftiCreateDescriptor(handle, DFTI_DOUBLE,DFTI_COMPLEX,1,1024)&lt;BR /&gt;
	&amp;nbsp; status = DftiSetValue(handle,DFTI_FORWARD_SCALE,1.0d0)&lt;BR /&gt;
	&amp;nbsp; status = DftiSetValue(handle,DFTI_BACKWARD_SCALE,1/dble(1024))&lt;BR /&gt;
	&amp;nbsp; status = DftiCommitDescriptor(handle)&lt;/P&gt;

&lt;P&gt;do j=1,step_num&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;status = DftiComputeBackward(handle,temp)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;do i= 1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp1(i) = temp(i)*dispersion(i)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;end do&lt;/P&gt;

&lt;P&gt;&amp;nbsp;Status = DftiComputeForward(handle,temp1)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;do i= 1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; temp2(i) = temp1(i)*exp(abs(temp1(i))**2*hhz)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	end do&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;status = DftiFreeDescriptor(handle)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; xy = temp2*exp(-abs(temp1)**2*hhz/2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; do i=1,1024&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; open (10, file = 'spec.dat')&lt;BR /&gt;
	&amp;nbsp; write (10,*) tau(i), abs(xy(i)**2)&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; end do&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	end program ss&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 16 May 2017 06:11:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Performing-split-step-fourier-using-MKL-dfti/m-p/1107849#M24220</guid>
      <dc:creator>Nadia_A_</dc:creator>
      <dc:date>2017-05-16T06:11:54Z</dc:date>
    </item>
    <item>
      <title>Hi Nadia,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Performing-split-step-fourier-using-MKL-dfti/m-p/1107850#M24221</link>
      <description>&lt;P&gt;Hi Nadia,&lt;/P&gt;

&lt;P&gt;You compute temp backward for 100000 times. I am afraid the result for 100000 later would be small enough which be seen as 0 value. Thus, temp1 and temp2 also be 0. I tried to print the original temp value, and result for calculating once, the result is fine. And I also found the result after 30 times computing already extend the boundary of smallest double floating number (around 10E-60). Please reduce step_num to see the result, Thanks.&lt;/P&gt;

&lt;P&gt;Best regards,&lt;BR /&gt;
	Fiona&lt;/P&gt;</description>
      <pubDate>Wed, 17 May 2017 03:03:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Performing-split-step-fourier-using-MKL-dfti/m-p/1107850#M24221</guid>
      <dc:creator>Zhen_Z_Intel</dc:creator>
      <dc:date>2017-05-17T03:03:00Z</dc:date>
    </item>
  </channel>
</rss>

