[petsc-users] pastix solver break at pastix_checkMatrix

Gong Ding gdiso at ustc.edu
Wed Dec 29 23:00:19 CST 2010


Dear all, 

I found the pastix solver   

petsc-3.1-p4
./configure --with-vendor-compilers=intel --with-blas-lapack-dir=/opt/intel/mkl/10.2.0.013/lib/em64t/ --download-pastix --download-scotch --with-shared=1 --with-debugging=1

For a poisson problem with symmetric matrix, pastix works well. 
However, for unsymmetric problem, the code break. valgrind reported that: 
Check : Sort CSC                OK
==4959== Invalid read of size 4
==4959==    at 0x1241931: PetscTrFreeDefault (mtr.c:280)
==4959==    by 0x150448A: MatConvertToCSC (pastix.c:188)
==4959==    by 0x1506638: MatFactorNumeric_PaStiX (pastix.c:390)
==4959==    by 0x13980AB: MatLUFactorNumeric (matrix.c:2587)
==4959==    by 0x16AB0A6: PCSetUp_LU (lu.c:158)
==4959==    by 0x1A9BD42: PCSetUp (precon.c:795)
==4959==    by 0x16FA8D0: KSPSetUp (itfunc.c:237)
==4959==    by 0x16FBB2A: KSPSolve (itfunc.c:353)
==4959==    by 0x17BEC6D: SNES_KSPSolve (snes.c:2944)
==4959==    by 0x17CEFEA: SNESSolve_LS (ls.c:191)
==4959==    by 0x17B8B78: SNESSolve (snes.c:2255)
==4959==    by 0x10B969D: FVM_NonlinearSolver::sens_solve() (fvm_nonlinear_solver.cc:820)
==4959==  Address 0x88e2f08 is 8 bytes inside a block of size 40 free'd
==4959==    at 0x4A05B16: operator delete(void*) (vg_replace_malloc.c:387)
==4959==    by 0xA42A53: __gnu_cxx::new_allocator<std::_Rb_tree_node<CTRI::Triangle*> >::deallocate(std::_Rb_tree_node<CTRI::Triangle*>*, unsigned long) (new_allocator.h:94)
==4959==    by 0xA41863: std::_Rb_tree<CTRI::Triangle*, CTRI::Triangle*, std::_Identity<CTRI::Triangle*>, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::_M_put_node(std::_Rb_tree_node<CTRI::Triangle*>*) (stl_tree.h:362)
==4959==    by 0xA419C8: std::_Rb_tree<CTRI::Triangle*, CTRI::Triangle*, std::_Identity<CTRI::Triangle*>, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::destroy_node(std::_Rb_tree_node<CTRI::Triangle*>*) (stl_tree.h:392)
==4959==    by 0xA42501: std::_Rb_tree<CTRI::Triangle*, CTRI::Triangle*, std::_Identity<CTRI::Triangle*>, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::erase(std::_Rb_tree_iterator<CTRI::Triangle*>) (stl_tree.h:1189)
==4959==    by 0xA4264A: std::_Rb_tree<CTRI::Triangle*, CTRI::Triangle*, std::_Identity<CTRI::Triangle*>, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::erase(std::_Rb_tree_iterator<CTRI::Triangle*>, std::_Rb_tree_iterator<CTRI::Triangle*>) (stl_tree.h:1281)
==4959==    by 0xA4257B: std::_Rb_tree<CTRI::Triangle*, CTRI::Triangle*, std::_Identity<CTRI::Triangle*>, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::erase(CTRI::Triangle* const&) (stl_tree.h:1215)
==4959==    by 0xA415E2: std::set<CTRI::Triangle*, std::less<CTRI::Triangle*>, std::allocator<CTRI::Triangle*> >::erase(CTRI::Triangle* const&) (stl_set.h:387)
==4959==    by 0xA3F6BD: CTRI::Triangle::~Triangle() (c_triangle.cc:109)
==4959==    by 0xA43F16: CTRI::TriMesh::~TriMesh() (c_trimesh.cc:163)
==4959==    by 0xA3F0C6: ctri_triangulate (c_tri_io.cc:35)
==4959==    by 0xD53FB9: MeshGeneratorTri3::do_refine(MeshRefinement&) (mesh_generation_tri3.cc:1369)
==4959==
[0]PETSC ERROR: PetscTrFreeDefault() called from MatConvertToCSC() line 188 in src/mat/impls/aij/mpi/pastix/pastix.c
[0]PETSC ERROR: Block at address 0x88e2ee0 is corrupted; cannot free;
may be block not allocated with PetscMalloc()

The test problems used to work well under other linear solvers such as MUMPS and superlu.
Does any meet this problem before?

Yours
Gong Ding



More information about the petsc-users mailing list