[petsc-dev] Segmentation fault GAMG + MatView

Barry Smith bsmith at mcs.anl.gov
Thu Feb 9 16:27:42 CST 2017


   When called with a NULL set of numerical values MatCreateSeqAIJWithArrays() should turn off the function pointers for things that don't make sense for matrices without numerical values, for example MatMult() and MatView(), in fact most function pointers don't make sense and should be turned off.
This could be done with a 
if (!a) {
   ...
}
after the call to MatSetType().

   Barry

> On Feb 9, 2017, at 4:08 PM, Matthew Knepley <knepley at gmail.com> wrote:
> 
> On Thu, Feb 9, 2017 at 4:00 PM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
> Oh my, this example also segfaults (at least on my Mac) when running:
> mpirun -np 1 ./ex1 -pc_type gamg -mat_view
> 
> Hong, in
> 
>   MatTransposeMatMultSymbolic_SeqAIJ_SeqAIJ() on line 1015
> 
> you create a matrix without values, not surprising since this is the symbolic phase. However,
> it calls MatAssemblyEnd(), which calls ViewFromOptions(), which gets an SEGV because
> it does not think to check if a->a is NULL.
> 
> a) Should we make View robust to missing matrix values?
> 
> b) I don't think this internal matrix should really be viewed like this, so maybe change its prefix?
> 
>   Thanks,
> 
>     Matt
>  
> [0]PETSC ERROR: [0] MatView_SeqAIJ_ASCII line 560 /Volumes/Data/Repositories/petsc/src/mat/impls/aij/seq/aij.c
> [0]PETSC ERROR: [0] MatView_SeqAIJ line 915 /Volumes/Data/Repositories/petsc/src/mat/impls/aij/seq/aij.c
> [0]PETSC ERROR: [0] MatView line 920 /Volumes/Data/Repositories/petsc/src/mat/interface/matrix.c
> [0]PETSC ERROR: [0] PetscObjectView line 92 /Volumes/Data/Repositories/petsc/src/sys/objects/destroy.c
> [0]PETSC ERROR: [0] PetscObjectViewFromOptions line 2702 /Volumes/Data/Repositories/petsc/src/sys/objects/options.c
> [0]PETSC ERROR: [0] MatAssemblyEnd line 5151 /Volumes/Data/Repositories/petsc/src/mat/interface/matrix.c
> [0]PETSC ERROR: [0] MatCreateSeqAIJWithArrays line 4137 /Volumes/Data/Repositories/petsc/src/mat/impls/aij/seq/aij.c
> [0]PETSC ERROR: [0] MatTransposeMatMultSymbolic_SeqAIJ_SeqAIJ line 1012 /Volumes/Data/Repositories/petsc/src/mat/impls/aij/seq/matmatmult.c
> [0]PETSC ERROR: [0] MatTransposeMatMult_SeqAIJ_SeqAIJ line 994 /Volumes/Data/Repositories/petsc/src/mat/impls/aij/seq/matmatmult.c
> [0]PETSC ERROR: [0] MatTransposeMatMult line 9607 /Volumes/Data/Repositories/petsc/src/mat/interface/matrix.c
> [0]PETSC ERROR: [0] PCGAMGCoarsen_AGG line 914 /Volumes/Data/Repositories/petsc/src/ksp/pc/impls/gamg/agg.c
> [0]PETSC ERROR: [0] PCSetUp_GAMG line 425 /Volumes/Data/Repositories/petsc/src/ksp/pc/impls/gamg/gamg.c
> [0]PETSC ERROR: [0] PCSetUp line 886 /Volumes/Data/Repositories/petsc/src/ksp/pc/interface/precon.c
> [0]PETSC ERROR: [0] KSPSetUp line 291 /Volumes/Data/Repositories/petsc/src/ksp/ksp/interface/itfunc.c
> 
> [0]PETSC ERROR: Petsc Development GIT revision: v3.7.5-3046-gde967d2  GIT Date: 2017-02-09 18:59:37 +0000
> [0]PETSC ERROR: Configure options --LDFLAGS=-L/opt/intel/lib --download-hypre --download-metis --download-mumps --download-parmetis --download-pastix --download-ptscotch --with-blacs-include=/opt/intel/mkl/include --with-blacs-lib=/opt/intel/mkl/lib/libmkl_blacs_mpich_lp64.so --with-blaslapack-dir=/opt/intel/mkl --with-chtml=0 --with-mkl_pardiso-include=/opt/intel/mkl/include --with-mkl_pardiso=1 --with-scalapack-include=/opt/intel/mkl/include --with-scalapack-lib="[/opt/intel/mkl/lib/libmkl_scalapack_lp64.so,/opt/intel/mkl/lib/libmkl_blacs_mpich_lp64.so]" --with-shared-libraries=1 --with-x=1 PETSC_ARCH=arch-darwin-c-debug
> 
>> On Feb 9, 2017, at 10:52 PM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
>> 
>> There, attached.
>> 
>> Thanks.
>> 
>> PS: here is the patch also, just in case
>> diff --git a/src/ksp/ksp/examples/tutorials/ex1.c b/src/ksp/ksp/examples/tutorials/ex1.c
>> index 6382c09..d9dc69a 100644
>> --- a/src/ksp/ksp/examples/tutorials/ex1.c
>> +++ b/src/ksp/ksp/examples/tutorials/ex1.c
>> @@ -123,6 +123,11 @@ int main(int argc,char **args)
>>      routines.
>>    */
>>    ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
>> +  ierr = KSPSetUp(ksp);CHKERRQ(ierr);
>> +  char right_options[] = "-ksp_norm_type unpreconditioned -ksp_pc_side right";
>> +  PetscOptionsInsertString(NULL,right_options);
>> +  ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);
>> +  ierr = KSPSetUp(ksp);CHKERRQ(ierr);
>> 
>>    if (nonzeroguess) {
>>      PetscScalar p = .5;
>> 
>> <ex1.c>
>> 
>>> On Feb 9, 2017, at 2:56 PM, Matthew Knepley <knepley at gmail.com> wrote:
>>> 
>>> On Thu, Feb 9, 2017 at 7:48 AM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
>>>> On Feb 9, 2017, at 2:31 PM, Matthew Knepley <knepley at gmail.com> wrote:
>>>> 
>>>> On Thu, Feb 9, 2017 at 7:29 AM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
>>>> 
>>>>> On Feb 9, 2017, at 2:17 PM, Matthew Knepley <knepley at gmail.com> wrote:
>>>>> 
>>>>> On Thu, Feb 9, 2017 at 7:06 AM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
>>>>> 
>>>>>> On Feb 9, 2017, at 1:37 PM, Matthew Knepley <knepley at gmail.com> wrote:
>>>>>> 
>>>>>> On Thu, Feb 9, 2017 at 4:56 AM, Pierre Jolivet <pierre.jolivet at enseeiht.fr> wrote:
>>>>>> Hello,
>>>>>> I _might_ be doing something wrong when calling KSPSetFromOptions/KSPSetUp, but still, am I supposed to get this kind of error?
>>>>>> [0]PETSC ERROR: No support for this operation for this object type
>>>>>> [0]PETSC ERROR: KSP gmres does not support PRECONDITIONED with RIGHT
>>>>>> 
>>>>>> If not, I’ll try to send a MWE (it basically depends on where I set the option -ksp_pc_side right).
>>>>>> 
>>>>>> I believe its telling you that it cannot display the preconditioned residual with right preconditioning, which is true.
>>>>>> Are you requesting both?
>>>>> 
>>>>> No, I’m just using -ksp_view and -ksp_pc_side right. In the “standard” case, it obviously work.
>>>>> However, the error is triggered if I set -ksp_pc_side right after a first call to KSPSetOperators()/KSPSetUp() without destroying the KSP.
>>>>> Should I destroy my KSP before changing from left- (default) to right-preconditioning if KSPSetOperators()/KSPSetUp has already been called?
>>>>> 
>>>>> Its likely you have to use
>>>>> 
>>>>>   http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/KSP/KSPSetNormType.html
>>>>> 
>>>>> or
>>>>> 
>>>>>   -ksp_norm_type unpreconditioned
>>>> 
>>>> If I use this after my first call to KSPSetUp, I now end up with:
>>>> [0]PETSC ERROR: KSP gmres does not support UNPRECONDITIONED with LEFT
>>>> 
>>>> Yes, you would need to use it at the same time that you change the preconditioning side.
>>> 
>>> Yes, I’m using PetscOptionsInsert, and whether I let PETSc parse "-ksp_pc_side right -ksp_norm_type unpreconditioned” or "-ksp_norm_type unpreconditioned -ksp_pc_side right” I end up with the same error afterwards.
>>> 
>>> Can you make an example do it (SNES ex5)? Or can you send a small example that does it?
>>> 
>>>   Thanks,
>>> 
>>>     Matt
>>>  
>>> Thanks.
>>> 
>>>>   Thanks,
>>>> 
>>>>      Matt 
>>>>> since we would not have a chance to change it since its been set already.
>>>>> 
>>>>>   Thanks,
>>>>> 
>>>>>      Matt
>>>>> 
>>>>> Thanks.
>>>>> 
>>>>>>   Thanks,
>>>>>> 
>>>>>>      Matt
>>>>>>  
>>>>>> Thanks,
>>>>>> Pierre
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>>>>> -- Norbert Wiener
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>>>> -- Norbert Wiener
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>>> -- Norbert Wiener
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>> -- Norbert Wiener
>> 
> 
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
> -- Norbert Wiener




More information about the petsc-dev mailing list