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); }
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); }
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); }
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); }
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 }