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

Reply via email to