// 2D FFT plan func Plan2d(nx, ny int, typ Type) Handle { var handle C.cufftHandle err := Result(C.cufftPlan2d( &handle, C.int(nx), C.int(ny), C.cufftType(typ))) if err != SUCCESS { panic(err) } return Handle(handle) }
// 1D FFT plan func Plan1d(nx int, typ Type, batch int) Handle { var handle C.cufftHandle err := Result(C.cufftPlan1d( &handle, C.int(nx), C.cufftType(typ), C.int(batch))) if err != SUCCESS { panic(err) } return Handle(handle) }
// 1D,2D or 3D FFT plan func PlanMany(n []int, inembed []int, istride int, oembed []int, ostride int, typ Type, batch int) Handle { var handle C.cufftHandle NULL := (*C.int)(unsafe.Pointer(uintptr(0))) inembedptr := NULL idist := 0 if inembed != nil { inembedptr = (*C.int)(unsafe.Pointer(&inembed[0])) idist = inembed[0] } oembedptr := NULL odist := 0 if oembed != nil { oembedptr = (*C.int)(unsafe.Pointer(&oembed[0])) odist = oembed[0] } err := Result(C.cufftPlanMany( &handle, C.int(len(n)), // rank (*C.int)(unsafe.Pointer(&n[0])), // n inembedptr, C.int(istride), C.int(idist), oembedptr, C.int(ostride), C.int(odist), C.cufftType(typ), C.int(batch))) if err != SUCCESS { panic(err) } return Handle(handle) }