首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PETSc - MatLUFactor -对此对象类型不支持此操作

PETSc - MatLUFactor -对此对象类型不支持此操作
EN

Stack Overflow用户
提问于 2014-10-22 21:43:29
回答 2查看 1K关注 0票数 0

我正试图在PETSc中编写LU分解应用程序。我的想法是,程序将打印非因式化矩阵,然后是分解矩阵,并计算分解本身所花费的时间。

我的代码是根据我在互联网上找到的一些信息编写的(我用这个职位的信息来初始化我的矩阵),但不幸的是,这还不够。我的代码会编译,但是当我试图运行它时,它只会大喊这个错误:

代码语言:javascript
复制
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: No support for this operation for this object type
[0]PETSC ERROR: Mat type mpiaij
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.5.2, Sep, 08, 2014 
[0]PETSC ERROR: ./petscLUFact on a arch-linux2-c-debug named martin-Aspire-E1-531 by martin Wed Oct 22 22:48:42 2014
[0]PETSC ERROR: Configure options 
[0]PETSC ERROR: #1 MatLUFactor() line 2715 in /home/martin/petsc-3.5.2/src/mat/interface/matrix.c
[0]PETSC ERROR: #2 main() line 49 in petscLUFact.c
[0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------
application called MPI_Abort(MPI_COMM_WORLD, 56) - process 0

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   EXIT CODE: 56
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================

这个错误是由MatLUFactor函数引起的,我想将它用于就地LU分解。问题是,我不知道我的代码到底出了什么问题。我认为,核心问题可能在于矩阵变量本身,可能是由于分配不当(我想到了MatMPIAIJSetPreallocation函数),但我不确定。

我试图用MatLUFactor函数替换MatLUFactorNumericMatLUFactorSymbolic,但是它比MatLUFactor更糟糕,它的错误“更大”:-)

最后,我尝试使用以下命令启动我的程序:

代码语言:javascript
复制
mpiexec -n 4 ./petscLUFact

所以,如果你知道任何解决方案,我会非常感激的;-)谢谢!

P.s.:很长一段时间以来,我一直在寻找可能的解决方案,我找到的最近一篇文章是这个邮件列表,但发问者使用的是ParMETIS和SuperLU包,据我所知,这些包我不使用。

这是我的源代码:

代码语言:javascript
复制
static char help[] = "Reads a PETSc matrix and vector from a file and reorders it.\n\
    f0 <input_file> : first file to load (small system)\n\
    -f1 <input_file> : second file to load (larger system)\n\n";

#include <petscsys.h>
#include <petscmat.h>

int main( int argc, char **args ) {
    Mat             A; // 'main' matrix
    PetscInt        r = 2, c = 2; // matrix dimensions (row x col)
    PetscInt        i,j; // coordinates
    PetscInt        Istart, Iend;
    PetscInt        Ii; // counter
    PetscScalar     v; // 2-dimensional array ??? (I'm not sure)
    PetscErrorCode  ierr;

    PetscInitialize( &argc, &args, (char*)0, help );

    // Create matrix
    ierr = MatCreate( PETSC_COMM_WORLD, &A );CHKERRQ( ierr );
    ierr = MatSetSizes( A, PETSC_DECIDE, PETSC_DECIDE, r*c, r*c );CHKERRQ( ierr );
    ierr = MatSetFromOptions(A);CHKERRQ( ierr );
    ierr = MatMPIAIJSetPreallocation( A, 2, PETSC_NULL, 2, PETSC_NULL );CHKERRQ( ierr );
    ierr = MatGetOwnershipRange(A,&Istart,&Iend);CHKERRQ( ierr );

    // INIT matrix
    ierr = MatSetValue( A, 0, 0, 1, INSERT_VALUES ); CHKERRQ( ierr );
    ierr = MatSetValue( A, 0, 1, 2, INSERT_VALUES ); CHKERRQ( ierr );
    ierr = MatSetValue( A, 1, 0, 3, INSERT_VALUES ); CHKERRQ( ierr );
    ierr = MatSetValue( A, 1, 1, 1, INSERT_VALUES ); CHKERRQ( ierr );

    ierr = MatAssemblyBegin( A, MAT_FINAL_ASSEMBLY ); CHKERRQ( ierr );
    ierr = MatAssemblyEnd( A, MAT_FINAL_ASSEMBLY ); CHKERRQ( ierr );

    // Print the matrix
    ierr = MatView( A, PETSC_VIEWER_STDOUT_WORLD ); CHKERRQ( ierr );

    // -----------------
    // LU-decomposition
    // -----------------
    MatFactorInfo mfi;

    // MatFactorInfo mfi INIT
    ierr = MatFactorInfoInitialize( &mfi ); CHKERRQ( ierr );
    mfi.fill = 2;
    mfi.dtcol = 0; 

    IS rowPerm; // variable for row permutations
    IS colPerm; // variable for column permutations

    // Possible replace for MatLUFactor
    /*
    Mat Fact;
    ierr = MatLUFactorSymbolic( Fact, A, rowPerm, colPerm, &mfi );
    ierr = MatLUFactorNumeric( Fact, A, &mfi );
    */      

    // I've read somewhere, that zeros are enough for last three
    // parameters, but it doesn't work too
    //ierr = MatLUFactor( A, 0, 0, 0 ); CHKERRQ( ierr );

    ierr = MatLUFactor( A, rowPerm, colPerm, &mfi );

    ierr = MatView( A, PETSC_VIEWER_STDOUT_WORLD ); CHKERRQ( ierr );

    MatDestroy(&A);

    PetscFinalize();

    return 0;
}

这是使用MatLUFactorNumeric和MatLUFactorSymbolic函数时的错误:

代码语言:javascript
复制
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: No support for this operation for this object type
[0]PETSC ERROR: Matrix format mpiaij does not have a built-in PETSc LU
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.5.2, Sep, 08, 2014 
[0]PETSC ERROR: ./petscLUFact on a arch-linux2-c-debug named martin-Aspire-E1-531 by martin Wed Oct 22 23:40:55 2014
[0]PETSC ERROR: Configure options 
[0]PETSC ERROR: #1 MatGetFactor() line 3961 in /home/martin/petsc-3.5.2/src/mat/interface/matrix.c
[0]PETSC ERROR: ------------------------------------------------------------------------
[0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range
[0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
[0]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory corruption errors
[0]PETSC ERROR: likely location of problem given in stack below
[0]PETSC ERROR: ---------------------  Stack Frames ------------------------------------
[0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,
[0]PETSC ERROR:       INSTEAD the line number of the start of the function
[0]PETSC ERROR:       is given.
[0]PETSC ERROR: [0] MatLUFactorSymbolic line 2825 /home/martin/petsc-3.5.2/src/mat/interface/matrix.c
[0]PETSC ERROR: [0] MatGetFactor line 3944 /home/martin/petsc-3.5.2/src/mat/interface/matrix.c
[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
[0]PETSC ERROR: Signal received
[0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.5.2, Sep, 08, 2014 
[0]PETSC ERROR: ./petscLUFact on a arch-linux2-c-debug named martin-Aspire-E1-531 by martin Wed Oct 22 23:40:55 2014
[0]PETSC ERROR: Configure options 
[0]PETSC ERROR: #2 User provided function() line 0 in  unknown file
application called MPI_Abort(MPI_COMM_WORLD, 59) - process 0

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   EXIT CODE: 59
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-23 19:02:47

以下是错误消息:

代码语言:javascript
复制
[0]PETSC ERROR: No support for this operation for this object type
[0]PETSC ERROR: Mat type mpiaij

因此,对于Mat类型的mpiaij,不支持此操作,这意味着LU分解。现在我们可以向在线文件呼吁,它确实说内置的LU只对顺序矩阵(seqaij)工作。它还显示了可用的包,如SuperLU和腮腺炎,这些包可以与PETSc一起使用来并行地进行LU分解。这两种方法都可以使用

代码语言:javascript
复制
--download-superlu --download-mumps
票数 1
EN

Stack Overflow用户

发布于 2014-10-23 19:16:30

它应该是

-下载-superlu_dist-下载parmetis -metis-下载-腮腺炎-下载-scalapack下载-下载-ptscotch

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26517659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档