MPI FFTW في Fortran لمجموعة معقدة ثلاثية الأبعاد

StackOverflow https://stackoverflow.com/questions/9464230

  •  13-11-2019
  •  | 
  •  

سؤال

أحتاج إلى إنشاء FFT لمجموعة ثلاثية الأبعاد في Fortran باستخدام MPI.لقد كنت أبحث في موقع FFTW وحاولت أيضًا البحث عن أمثلة عبر الإنترنت ولكن لم أتمكن من العثور إلا على هذا الرمز:

   use, intrinsic :: iso_c_binding
   include 'fftw3-mpi.f03'
   integer(C_INTPTR_T), parameter :: L = ...
   integer(C_INTPTR_T), parameter :: M = ...
   type(C_PTR) :: plan, cdata
   complex(C_DOUBLE_COMPLEX), pointer :: data(:,:)
   integer(C_INTPTR_T) :: i, j, alloc_local, local_M, local_j_offset

 !   get local data size and allocate (note dimension reversal)
   alloc_local = fftw_mpi_local_size_2d(M, L, MPI_COMM_WORLD, &
                                        local_M, local_j_offset)
   cdata = fftw_alloc_complex(alloc_local)
   call c_f_pointer(cdata, data, [L,local_M])

 !   create MPI plan for in-place forward DFT (note dimension reversal)
   plan = fftw_mpi_plan_dft_2d(M, L, data, data, MPI_COMM_WORLD, &
                               FFTW_FORWARD, FFTW_MEASURE)

 ! initialize data to some function my_function(i,j)
   do j = 1, local_M
     do i = 1, L
       data(i, j) = my_function(i, j + local_j_offset)
     end do
   end do

 ! compute transform (as many times as desired)
   call fftw_mpi_execute_dft(plan, data, data)

   call fftw_destroy_plan(plan)
   call fftw_free(cdata)

يحسب هذا الكود تحويل FFT لمصفوفة ثنائية الأبعاد.سؤالي هو:كيف يمكنني استخدام هذا الرمز لحساب تحويل FFT لمجموعة ثلاثية الأبعاد؟

هل كانت مفيدة؟

المحلول

متعلق fftw_mpi_plan_dft_2d القي نظرة على:

http://www.fftw.org/doc/MPI-Plan-Creation.html

ومن الواضح تماما أنه يجب أن يكون هناك fftw_mpi_plan_dft_3d وظيفة كذلك.نفس الشيء بالطبع ل fftw_mpi_local_size_2d.سوف تتغير الوسائط قليلاً ولكن الوثائق ستساعدك في هذا الأمر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top