[petsc-users] Fieldsplit PC null pointer error on getksp

Sander Land sander.land at gmail.com
Tue Jun 30 09:10:16 CDT 2015


This gives
[0]PETSC ERROR: Object is in wrong state
[0]PETSC ERROR: Matrix must be set first

The PC is from a SNESGetKSP, and I have called SNESSetJacobian before this.

Thanks,
Sander

On Tue, Jun 30, 2015 at 2:09 PM, Matthew Knepley <knepley at gmail.com> wrote:

> On Tue, Jun 30, 2015 at 11:43 AM, Sander Land <sander.land at gmail.com>
> wrote:
>
>> I am trying to use the Schur complement preconditioner in petsc, but am
>> encountering a null argument error calling PCFieldSplitGetSubKSP.
>> This only happens on PC_COMPOSITE_SCHUR, the multiplicative/additive
>> options do return a KSP array.
>>
>> Error message:
>>
>> [0]PETSC ERROR: --------------------- Error Message
>> --------------------------------------------------------------
>> [0]PETSC ERROR: Null argument, when expecting valid pointer
>> [0]PETSC ERROR: Null Object: Parameter # 1
>> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html
>> for trouble shooting.
>> [0]PETSC ERROR: Petsc Release Version 3.6.0, Jun, 09, 2015
>> [0]PETSC ERROR: ./elecmech on a arch-linux2-cxx-debug
>> [0]PETSC ERROR: Configure options --with-shared-libraries=1
>> --with-debugging=1 --download-openmpi=1 --with-clanguage=c++
>> --download-fblaslapack=1 --download-scalapack=1 --download-blacs=1
>> --download-suitesparse=1 --download-pastix=1 --download-superlu=1
>> --dowload-essl=1 --download-ptscotch=1 --download-mumps=1 --download-lusol=1
>> [0]PETSC ERROR: #1 MatSchurComplementGetKSP() line 317 in
>> petsc-3.6/src/ksp/ksp/utils/schurm.c
>> [0]PETSC ERROR: #2 PCFieldSplitGetSubKSP_FieldSplit_Schur() line 1264 in
>> petsc-3.6/src/ksp/pc/impls/fieldsplit/fieldsplit.c
>> [0]PETSC ERROR: #3 PCFieldSplitGetSubKSP() line 1668 in
>> petsc-3.6/src/ksp/pc/impls/fieldsplit/fieldsplit.c
>>
>> Code snippet:
>>
>> ISCreateGeneral(PETSC_COMM_SELF,xp_dofs,&ii[0],PETSC_COPY_VALUES,&is_xp);
>> ISCreateGeneral(PETSC_COMM_SELF,all_dofs -
>> xp_dofs,&ii[xp_dofs],PETSC_COPY_VALUES,&is_wk);
>>
>> PCSetType(pc,PCFIELDSPLIT);
>> PCFieldSplitSetType(pc,PC_COMPOSITE_SCHUR);
>> PCFieldSplitSetIS(pc,"xp",is_xp);
>> PCFieldSplitSetIS(pc,"wk",is_wk);
>> int n;
>> KSP* ksps;
>> PC   subpc;
>> PCFieldSplitGetSubKSP(pc,&n,&ksps);
>>
>>
>> ii here is simply an array with ii[i] = i. There is probably a better way
>> to simply indicate two blocks of different size, but I couldn't find it.
>>
>
> It looks like the PC is not setup. Can you try calling PCSetUp(pc) before
> GetSubKSP()?
>
>   Thanks,
>
>      Matt
>
>
>> Thanks,
>> Sander
>>
>
>
>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150630/a1fef9f8/attachment-0001.html>


More information about the petsc-users mailing list