void fft_3d_destroy_plan(struct fft_plan_3d *plan)

{
  if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan);
  if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan);
  if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan);
  if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan);

  if (plan->copy) free(plan->copy);
  if (plan->scratch) free(plan->scratch);

  if (plan->plan_slow_forward != plan->plan_mid_forward &&
      plan->plan_slow_forward != plan->plan_fast_forward) {
    fftw_destroy_plan(plan->plan_slow_forward);
    fftw_destroy_plan(plan->plan_slow_backward);
  }
  if (plan->plan_mid_forward != plan->plan_fast_forward) {
    fftw_destroy_plan(plan->plan_mid_forward);
    fftw_destroy_plan(plan->plan_mid_backward);
  }
  fftw_destroy_plan(plan->plan_fast_forward);
  fftw_destroy_plan(plan->plan_fast_backward);

  free(plan);
}
Beispiel #2
0
void fft_3d_destroy_plan(struct fft_plan_3d *plan)
{
  if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan);
  if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan);
  if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan);
  if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan);

  if (plan->copy) free(plan->copy);
  if (plan->scratch) free(plan->scratch);

  free(plan);
}
Beispiel #3
0
void fft_3d_destroy_plan(struct fft_plan_3d *plan)
{
  if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan);
  if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan);
  if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan);
  if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan);

  if (plan->copy) free(plan->copy);
  if (plan->scratch) free(plan->scratch);

#if defined(FFT_MKL)
  DftiFreeDescriptor(&(plan->handle_fast));
  DftiFreeDescriptor(&(plan->handle_mid));
  DftiFreeDescriptor(&(plan->handle_slow));
#elif defined(FFT_FFTW2)
  if (plan->plan_slow_forward != plan->plan_fast_forward &&
      plan->plan_slow_forward != plan->plan_mid_forward) {
    fftw_destroy_plan(plan->plan_slow_forward);
    fftw_destroy_plan(plan->plan_slow_backward);
  }
  if (plan->plan_mid_forward != plan->plan_fast_forward) {
    fftw_destroy_plan(plan->plan_mid_forward);
    fftw_destroy_plan(plan->plan_mid_backward);
  }
  fftw_destroy_plan(plan->plan_fast_forward);
  fftw_destroy_plan(plan->plan_fast_backward);
#elif defined(FFT_FFTW3)
  FFTW_API(destroy_plan)(plan->plan_slow_forward);
  FFTW_API(destroy_plan)(plan->plan_slow_backward);
  FFTW_API(destroy_plan)(plan->plan_mid_forward);
  FFTW_API(destroy_plan)(plan->plan_mid_backward);
  FFTW_API(destroy_plan)(plan->plan_fast_forward);
  FFTW_API(destroy_plan)(plan->plan_fast_backward);
#else
  if (plan->cfg_slow_forward != plan->cfg_fast_forward &&
      plan->cfg_slow_forward != plan->cfg_mid_forward) {
    free(plan->cfg_slow_forward);
    free(plan->cfg_slow_backward);
  }
  if (plan->cfg_mid_forward != plan->cfg_fast_forward) {
    free(plan->cfg_mid_forward);
    free(plan->cfg_mid_backward);
  }
  free(plan->cfg_fast_forward);
  free(plan->cfg_fast_backward);
#endif

  free(plan);
}
Beispiel #4
0
void fft_3d_destroy_plan(struct fft_plan_3d *plan)

{
    if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan);
    if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan);
    if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan);
    if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan);

    if (plan->copy) free(plan->copy);
    if (plan->scratch) free(plan->scratch);

#ifdef FFT_SGI
    free(plan->coeff1);
    free(plan->coeff2);
    free(plan->coeff3);
#endif
#ifdef FFT_INTEL
    free(plan->coeff1);
    free(plan->coeff2);
    free(plan->coeff3);
#endif
#ifdef FFT_T3E
    free(plan->coeff1);
    free(plan->coeff2);
    free(plan->coeff3);
    free(plan->work1);
    free(plan->work2);
    free(plan->work3);
#endif
#ifdef FFT_FFTW
    if (plan->plan_slow_forward != plan->plan_mid_forward &&
            plan->plan_slow_forward != plan->plan_fast_forward) {
        fftw_destroy_plan(plan->plan_slow_forward);
        fftw_destroy_plan(plan->plan_slow_backward);
    }
    if (plan->plan_mid_forward != plan->plan_fast_forward) {
        fftw_destroy_plan(plan->plan_mid_forward);
        fftw_destroy_plan(plan->plan_mid_backward);
    }
    fftw_destroy_plan(plan->plan_fast_forward);
    fftw_destroy_plan(plan->plan_fast_backward);
#endif

    free(plan);
}
Beispiel #5
0
void fft_3d_destroy_plan_cuda(struct fft_plan_3d *plan)
{
#ifdef FFT_CUFFT
  if (plan->pre_plan) remap_3d_destroy_plan(plan->pre_plan);
  if (plan->mid1_plan) remap_3d_destroy_plan(plan->mid1_plan);
  if (plan->mid2_plan) remap_3d_destroy_plan(plan->mid2_plan);
  if (plan->post_plan) remap_3d_destroy_plan(plan->post_plan);

  if (plan->copy) free(plan->copy);
  if (plan->scratch) free(plan->scratch);


  //cufftDestroy(plan->plan_fast);
  //cufftDestroy(plan->plan_mid);
  //cufftDestroy(plan->plan_slow);
  cufftDestroy(plan->plan_3d);
  free(plan);
#endif
}