Matrix convergence - part 2

Barry Smith bsmith at mcs.anl.gov
Tue Oct 31 07:56:54 CST 2006


  Billy,

   Just do what it says, Call PCSetUp(pc) before PCASMGetSubKSP().

   Barry


On Tue, 31 Oct 2006, billy at dem.uminho.pt wrote:

> 
> Hi,
> 
> When I use the option -sub_pc_type ilu or no option, I can't lower the residual
> of the pressure which is derived from a Laplace equation to the specified
> tolerance of 1E-8:   
> 
> Matrix p Number of iterations: 8 Residual: +3.971771E-01
> 
> On the other hand if I use option -sub_pc_type lu, I get:
> 
> Matrix p Number of iterations: 1 Residual: +6.174315E-24
> 
> Since this only happens in some cases, I would like to switch between ILU and LU
> preconditioning.
> 
> I tried that by adding the following code:
> 
>   PCASMGetSubKSP(pc, &nlocal, &first, &subksp); 
> 
>   KSPGetPC(subksp, &subpc);
> 
>   PCSetType(subpc, SubPrecondProc);
> 
> 
> Being SubPrecondProc = PCILU or SubPrecondProc = PCLU. However I get the
> following error:
> 
> 0]PETSC ERROR: PCASMGetSubKSP_ASM() line 488 in src/ksp/pc/impls/asm/asm.c
> [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: PCASMGetSubKSP() line 786 in src/ksp/pc/impls/asm/asm.c
> [0]PETSC ERROR: KSPGetPC() line 1135 in src/ksp/ksp/interface/itfunc.c
> [0]PETSC ERROR: Corrupt argument: see
> http://www.mcs.anl.gov/petsc/petsc-as/documentation/troubleshooting.html#Corrupt!
> [0]PETSC ERROR: Invalid Pointer to Object: Parameter # 1!
> [0]PETSC ERROR: PCSetType() line 61 in src/ksp/pc/interface/pcset.c
> [0]PETSC ERROR: Invalid argument!
> [0]PETSC ERROR: Wrong type of object: Parameter # 1!
> 
> Matrix s Number of iterations: 0 Residual: +0.000000E+00
> [0]PETSC ERROR: PCASMGetSubKSP_ASM() line 488 in src/ksp/pc/impls/asm/asm.c
> [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: PCASMGetSubKSP() line 786 in src/ksp/pc/impls/asm/asm.c
> [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably
> memory access out of range
> [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
> [0]PETSC ERROR: or try http://valgrind.org on linux to find memory corruption errors
> [0]PETSC ERROR: likely location of problem given in stack below
> [0]PETSC ERROR: --------------- Stack Frames ---------------
> [0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,
> [0]PETSC ERROR:       INSTEAD the line number of the start of the function
> [0]PETSC ERROR:       is given.
> [0]PETSC ERROR: [0] KSPGetPC line 1134 src/ksp/ksp/interface/itfunc.c
> [0]PETSC ERROR: [0] PCASMGetSubKSP_ASM line 486 src/ksp/pc/impls/asm/asm.c
> [0]PETSC ERROR: [0] PCASMGetSubKSP line 782 src/ksp/pc/impls/asm/asm.c
> [0]PETSC ERROR: --------------------------------------------
> [0]PETSC ERROR: User provided function() line 0 in unknown directory unknown file
> [0]PETSC ERROR: Signal received!
> [0]PETSC ERROR:  !
> 
> Anyone knows why?
> 
> Thanks,  
> 
> Billy.
> 
> 
> 




More information about the petsc-users mailing list