I understand that, but I'm trying to provide default behavior for the solver 
because the default one (no parameters) works very bad in my case.
However, I'm stuck because I can't set the same parameters that I obtain with 
command line arguments "-pc_type asm -sub_pc_type lu".

Can someone point me where is the error with the following code?

...
...
            PetscInitialize(&argc, &argv,NULL,NULL);
            PetscErrorCode ierr = MatCreate(PETSC_COMM_WORLD,&A_);CHKERR(ierr);
            
            // create linear solver context
            ierr = KSPCreate(PETSC_COMM_WORLD,&ksp_);CHKERR(ierr);
            
            // initial nonzero guess
            ierr = KSPSetInitialGuessNonzero(ksp_,PETSC_TRUE); CHKERR(ierr);
            
            // set runtime options
            ierr = KSPSetFromOptions(ksp_);CHKERR(ierr);

            // set the default preconditioner for this program to be ASM
            PC pc;
            ierr = KSPGetPC(ksp_,&pc); CHKERR(ierr);
            ierr = PCSetType(pc, PCASM); CHKERR(ierr);

            KSP        *subksp;       /* array of KSP contexts for local 
subblocks */
            PetscInt   nlocal,first;  /* number of local subblocks, first local 
subblock */
            PC         subpc;          /* PC context for subblock */
                                    
            /* 
             Call KSPSetUp() to set the block Jacobi data structures (including
             creation of an internal KSP context for each block).
             
             Note: KSPSetUp() MUST be called before PCASMGetSubKSP().
             */
            ierr = KSPSetUp(ksp_);CHKERR(ierr);
            
            /*
             Extract the array of KSP contexts for the local blocks
             */
            ierr = PCASMGetSubKSP(pc,&nlocal,&first,&subksp);CHKERR(ierr);
            
            /*
             Loop over the local blocks, setting various KSP options
             for each block.  
             */
            for (int i=0; i<nlocal; i++) {
                ierr = KSPGetPC(subksp[i],&subpc);CHKERR(ierr);
                ierr = PCSetType(subpc,PCLU);CHKERR(ierr);
            }

This is the error I get:

User explicitly sets subdomain solvers.
[0]PETSC ERROR: --------------------- Error Message 
------------------------------------
[0]PETSC ERROR: Null argument, when expecting valid pointer!
[0]PETSC ERROR: Null Object: Parameter # 1!
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 7, Mon Dec 20 14:26:37 CST 
2010
[0]PETSC ERROR: See docs/changes/index.html for recent updates.
[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
[0]PETSC ERROR: See docs/index.html for manual pages.
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: yafeq/a.out on a darwin10. named lsmspc26.epfl.ch by aaragon 
Wed Apr 27 09:14:25 2011
[0]PETSC ERROR: Libraries linked from /Users/aaragon/Local/lib
[0]PETSC ERROR: Configure run at Thu Apr  7 17:01:26 2011
[0]PETSC ERROR: Configure options --prefix=/Users/aaragon/Local 
--with-mpi-include=/Users/aaragon/Local/include 
--with-mpi-lib=/Users/aaragon/Local/lib/libmpich.a --with-superlu=1 
--with-superlu-include=/Users/aaragon/Local/include/superlu 
--with-superlu-lib=/Users/aaragon/Local/lib/libsuperlu.a --with-superlu_dist=1 
--with-superlu_dist-include=/Users/aaragon/Local/include/superlu_dist 
--with-superlu_dist-lib=/Users/aaragon/Local/lib/libsuperlu_dist.a 
--with-parmetis=1 --download-parmetis=ifneeded
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: MatGetVecs() line 7265 in src/mat/interface/matrix.c
[0]PETSC ERROR: KSPGetVecs() line 806 in src/ksp/ksp/interface/iterativ.c
[0]PETSC ERROR: KSPSetUp_GMRES() line 94 in src/ksp/ksp/impls/gmres/gmres.c
[0]PETSC ERROR: KSPSetUp() line 199 in src/ksp/ksp/interface/itfunc.c
[0]PETSC ERROR: User provided function() line 397 in 
"unknowndirectory/"/Users/aaragon/Local/include/cpputils/solver.hpp
[0]PETSC ERROR: --------------------- Error Message 
------------------------------------
[0]PETSC ERROR: Operation done in wrong order!
[0]PETSC ERROR: Need to call PCSetUP() on PC (or KSPSetUp() on the outer KSP 
object) before calling here!
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 7, Mon Dec 20 14:26:37 CST 
2010
[0]PETSC ERROR: See docs/changes/index.html for recent updates.
[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
[0]PETSC ERROR: See docs/index.html for manual pages.
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: yafeq/a.out on a darwin10. named lsmspc26.epfl.ch by aaragon 
Wed Apr 27 09:14:25 2011
[0]PETSC ERROR: Libraries linked from /Users/aaragon/Local/lib
[0]PETSC ERROR: Configure run at Thu Apr  7 17:01:26 2011
[0]PETSC ERROR: Configure options --prefix=/Users/aaragon/Local 
--with-mpi-include=/Users/aaragon/Local/include 
--with-mpi-lib=/Users/aaragon/Local/lib/libmpich.a --with-superlu=1 
--with-superlu-include=/Users/aaragon/Local/include/superlu 
--with-superlu-lib=/Users/aaragon/Local/lib/libsuperlu.a --with-superlu_dist=1 
--with-superlu_dist-include=/Users/aaragon/Local/include/superlu_dist 
--with-superlu_dist-lib=/Users/aaragon/Local/lib/libsuperlu_dist.a 
--with-parmetis=1 --download-parmetis=ifneeded
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: PCASMGetSubKSP_ASM() line 644 in src/ksp/pc/impls/asm/asm.c
[0]PETSC ERROR: PCASMGetSubKSP() line 926 in src/ksp/pc/impls/asm/asm.c
[0]PETSC ERROR: User provided function() line 402 in 
"unknowndirectory/"/Users/aaragon/Local/include/cpputils/solver.hpp
[0]PETSC ERROR: --------------------- Error Message 
------------------------------------
[0]PETSC ERROR: Invalid argument!
[0]PETSC ERROR: Wrong type of object: Parameter # 1!
[0]PETSC ERROR: 
------------------------------------------------------------------------
[0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 7, Mon Dec 20 14:26:37 CST 
2010

and the error continues...


On Apr 26, 2011, at 5:26 PM, Matthew Knepley wrote:

> 2011/4/26 Alejandro Marcos Arag?n <alejandro.aragon at gmail.com>
> Thank you Barry, your suggestion really helped speed up the program. The 
> maximum number of iterations is 48. I still don't know what the asm 
> pre-conditioner is but I guess I just need to read the manual. I'm trying to 
> add code to do what you suggested automatically, and I found that I can add:
> 
>             PC pc;
>             ierr = KSPGetPC(ksp_,&pc); CHKERR(ierr);
>             ierr = PCSetType(pc, PCASM); CHKERR(ierr);
> 
> However, I cannot find the function to replace the -sub_pc_type. Can you 
> point me where to look? My system may not be symmetric so I can't use the cg 
> option.
> 
> 1) Hard coding it in your program does not make sense. You gain nothing, and 
> lose a lot of flexibility.
> 
> 2) You can do this using
> 
>   
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/PC/PCASMGetSubKSP.html
> 
>     Matt
>  
> Thanks again for your response.
> 
> a?
> 
> 
> On Apr 26, 2011, at 2:23 PM, Barry Smith wrote:
> 
>> 
>>> System solved in 3664 iterations... 42.683 s
>> 
>>   The preconditioner is simply not up to the task it has been assigned.  
>> This number of iterations is problematic.
>> 
>>    Have you tried -pc_type asm -sub_pc_type lu     If that works well you 
>> can try -pc_type asm -sub_pc_type ilu and see if that still works.  
>> 
>>   If the matrix is indeed symmetric positive definite you will want to use 
>> -ksp_type cg
>> 
>> 
>> 
>>    Barry
>> 
>> 
>> On Apr 26, 2011, at 1:37 AM, Alejandro Marcos Arag?n wrote:
>> 
>>> Hi all,
>>> 
>>> I'm using the standard configuration of the KSP solver, but the time it 
>>> takes to solve a large system of equations is increasing (because of the 
>>> increasing number of iterations?). These are my timing lines and the log 
>>> from the KSP solver in two consecutive solves:
>>> 
>>> [1]   Solving system... 0.154203 s
>>> 
>>> KSP Object:
>>> type: gmres
>>>   GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
>>> Orthogonalization with no iterative refinement
>>>   GMRES: happy breakdown tolerance 1e-30
>>> maximum iterations=10000
>>> tolerances:  relative=1e-05, absolute=1e-50, divergence=10000
>>> left preconditioning
>>> using nonzero initial guess
>>> using PRECONDITIONED norm type for convergence test
>>> PC Object:
>>> type: bjacobi
>>>   block Jacobi: number of blocks = 3
>>>   Local solve is same for all blocks, in the following KSP and PC objects:
>>> KSP Object:(sub_)
>>>   type: preonly
>>>   maximum iterations=10000, initial guess is zero
>>>   tolerances:  relative=1e-05, absolute=1e-50, divergence=10000
>>>   left preconditioning
>>>   using PRECONDITIONED norm type for convergence test
>>> PC Object:(sub_)
>>>   type: ilu
>>>     ILU: out-of-place factorization
>>>     0 levels of fill
>>>     tolerance for zero pivot 1e-12
>>>     using diagonal shift to prevent zero pivot
>>>     matrix ordering: natural
>>>     factor fill ratio given 1, needed 1
>>>       Factored matrix follows:
>>>         Matrix Object:
>>>           type=seqaij, rows=2020, cols=2020
>>>           package used to perform factorization: petsc
>>>           total: nonzeros=119396, allocated nonzeros=163620
>>>             using I-node routines: found 676 nodes, limit used is 5
>>>   linear system matrix = precond matrix:
>>>   Matrix Object:
>>>     type=seqaij, rows=2020, cols=2020
>>>     total: nonzeros=119396, allocated nonzeros=163620
>>>       using I-node routines: found 676 nodes, limit used is 5
>>> linear system matrix = precond matrix:
>>> Matrix Object:
>>>   type=mpiaij, rows=6058, cols=6058
>>>   total: nonzeros=365026, allocated nonzeros=509941
>>>     using I-node (on process 0) routines: found 676 nodes, limit used is 5
>>> 
>>> 
>>> [1]   System solved in 51 iterations... 0.543215 s
>>> ...
>>> ...
>>> ...
>>> 
>>> [1]   Solving system... 0.302414 s
>>> 
>>> KSP Object:
>>> type: gmres
>>>   GMRES: restart=30, using Classical (unmodified) Gram-Schmidt 
>>> Orthogonalization with no iterative refinement
>>>   GMRES: happy breakdown tolerance 1e-30
>>> maximum iterations=10000
>>> tolerances:  relative=1e-05, absolute=1e-50, divergence=10000
>>> left preconditioning
>>> using nonzero initial guess
>>> using PRECONDITIONED norm type for convergence test
>>> PC Object:
>>> type: bjacobi
>>>   block Jacobi: number of blocks = 3
>>>   Local solve is same for all blocks, in the following KSP and PC objects:
>>> KSP Object:(sub_)
>>>   type: preonly
>>>   maximum iterations=10000, initial guess is zero
>>>   tolerances:  relative=1e-05, absolute=1e-50, divergence=10000
>>>   left preconditioning
>>>   using PRECONDITIONED norm type for convergence test
>>> PC Object:(sub_)
>>>   type: ilu
>>>     ILU: out-of-place factorization
>>>     0 levels of fill
>>>     tolerance for zero pivot 1e-12
>>>     using diagonal shift to prevent zero pivot
>>>     matrix ordering: natural
>>>     factor fill ratio given 1, needed 1
>>>       Factored matrix follows:
>>>         Matrix Object:
>>>           type=seqaij, rows=2020, cols=2020
>>>           package used to perform factorization: petsc
>>>           total: nonzeros=119396, allocated nonzeros=163620
>>>             using I-node routines: found 676 nodes, limit used is 5
>>>   linear system matrix = precond matrix:
>>>   Matrix Object:
>>>     type=seqaij, rows=2020, cols=2020
>>>     total: nonzeros=119396, allocated nonzeros=163620
>>>       using I-node routines: found 676 nodes, limit used is 5
>>> linear system matrix = precond matrix:
>>> Matrix Object:
>>>   type=mpiaij, rows=6058, cols=6058
>>>   total: nonzeros=365026, allocated nonzeros=509941
>>>     using I-node (on process 0) routines: found 676 nodes, limit used is 5
>>> 
>>> [1]   System solved in 3664 iterations... 42.683 s
>>> 
>>> 
>>> 
>>> As you can see, the second iteration takes more than 40 seconds to solve. 
>>> Could some explain why this is happening and why he number of iterations is 
>>> increasing dramatically between solves? Thank you all,
>>> 
>>> Alejandro M. Arag?n, Ph.D.
>> 
> 
> 
> 
> 
> -- 
> 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/20110427/a143dc5f/attachment-0001.htm>

Reply via email to