[petsc-users] KSPBuildResidual

jarunan at ascomp.ch jarunan at ascomp.ch
Wed Dec 23 05:01:04 CST 2009


Dear Petsc-Team

I am using KSPBuildResidual() to calculate true residual and use it as  
convergence criteria. It means the program will call KSPBuildResidual  
every iteration. I choose GMRES as a solver but I read in manual, it  
is written that this command is expensive for GMRES and some other  
solvers.

Is it also expensive for BICGSTAB?
Is there other possibility to calculate true residual without calling  
KSPBuildResidual() or KSPBuildSolution() ?

Best regards,
Jarunan


Quoting Rob Ellis <Robert.G.Ellis at Shaw.ca>:

> Hi Dave,
>
> Thanks! That's what I needed to know.
>
> Cheers,
>
> Rob
>
>
>
> From: petsc-users-bounces at mcs.anl.gov
> [mailto:petsc-users-bounces at mcs.anl.gov] On Behalf Of Dave May
> Sent: Tuesday, December 22, 2009 10:13 AM
> To: PETSc users list
> Subject: Re: [petsc-users] Two ways to set Vec values?
>
>
>
> Hey Rob
>     If you are sure that you only want to insert values locally into x, then
> option 1 will be faster.
> Option 2 will communicate values if the inserted values live on another
> processor. If you don't need to send any data, use Option 1.
>
>
>
>
>
> On Tue, Dec 22, 2009 at 7:04 PM, Rob Ellis <Robert.G.Ellis at shaw.ca> wrote:
>
> Hi Petsc'ers
>
> Can someone please let me know if I can set MPI vector values using either
> of the following methods? I wish to set the values of 'x' from the values in
> 'work'. Both methods operate correctly, but I would like to know which is
> more efficient, and/or recommended and why.
>
>
> 1. GetArray/RestoreArray Method:
>
> call VecGetOwnershipRange(x,imin,imax,ierr)
> call VecGetArray(x,x_local_v,x_local_i,ierr)
> do i=imin,imax-1
>  x_local(i-imin)=work(i+1)
> enddo
> call VecRestoreArray(x,x_local_v,x_local_i,ierr)
>
>
>
> 2. SetValues/VecAssembly Method:
>
> call VecGetOwnershipRange(x,imin,imax,ierr)
> nx_local = imax-imin
> do i=imin,imax-1
>  icol(i-imin+1)=i
> enddo
> call VecSetValues(x,nx_local,icol,work(imin+1),INSERT_VALUES,ierr)
> call VecAssemblyBegin(x,ierr)
> call VecAssemblyEnd(x,ierr)
>
>
> Method 1 is more compact and does not require the auxiliary column number
> vector, nor does it require the VecAssembly, however, it seems to be what is
> suggested by the examples. Also, is it recommended to use VecGetArrayF90?
>
> Thanks for your help,
> Cheers,
> Rob
>
>
>
>



-- 
Jarunan Panyasantisuk
Development Engineer
ASCOMP GmbH, Technoparkstr. 1
CH-8005 Zurich, Switzerland
Phone : +41 44 445 4072
Fax   : +41 44 445 4075
E-mail: jarunan at ascomp.ch
www.ascomp.ch

Winter Training on TransAT: Zurich, 20 Feb. 2010.
http://ascomp.ch/training.html


More information about the petsc-users mailing list