У меня есть матрица PETSc, и я хотел бы применить 1d-FFT к каждой строке этой матрицы, желательно при сохранении возможности распределения матрицы по нескольким узлам. На основе документации и примеров (например, здесь: https://www.mcs.anl.gov/petsc/petsc-current/src/mat/tests/ex143.c.html) Мне нужно создать объект FFT (матрицу FFT) и затем используйте этот объект для создания/инициализации векторов, используемых для самого БПФ:
MatCreateFFT(PETSC_COMM_WORLD,DIM,dim,MATFFTW,&A);//Create FFT object
MatCreateVecsFFTW(A,&x,&y,&z); //Initialize Vectors
MatMult(A,x,y); //Apply FFT
Тем не менее, насколько я вижу, это будет выполнять только 1d-FFT над вектором, а не 1d-FFT над каждой строкой в моей матрице. Конечно, я могу просто перебирать строки в моей матрице и копировать их в вектор (и потом получать результат), но это немного замедлит процесс. Или мне нужно прибегать к FFTW без использования интерфейса от PETSc (как описано в том же примере, что и выше), если я хочу выполнить описанный выше процесс?