Применение 1d-FFT к каждой строке в PETSc-матрице

У меня есть матрица 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 (как описано в том же примере, что и выше), если я хочу выполнить описанный выше процесс?


person arc_lupus    schedule 03.12.2020    source источник


Ответы (1)


Вы должны иметь возможность вызывать MatDenseGetColumnVec а затем скормите это вашему БПФ.

person Matt Knepley    schedule 02.03.2021