[petsc-users] SNESSetConvergenceTest

Barry Smith bsmith at mcs.anl.gov
Wed Jan 22 13:52:36 CST 2014


  We need more information to track this down. Could you make a simple standalone code that reproduces the problem? Just creates a this, creates a SNES, sets the function, sets the test code and then crashes when runs.

   But since it is not crashing in the SNESConvergenceTest_snes routine I suspect it may be memory corruption. Have you run your code under valgrind? http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind

   Barry

On Jan 20, 2014, at 7:14 PM, Dharmendar Reddy <dharmareddy84 at gmail.com> wrote:

> Hello,
>         I am getting a segmentation fault when i use
> SNESSetConvergenceTest from Fortran.
> 
> I use the following:
> 
> call SNESSetConvergenceTest(this%snes, SNESConvergenceTest_snes,
> this,PETSC_NULL_FUNCTION, ierr)   (Line 1)
> 
> where the soubtoutine is
> 
> subroutine SNESConvergenceTest_snes(snes,it,xnorm,gnorm,fnorm,reason,this, ierr)
>  implicit none
> #include "finclude/petsc.h"
>  ! IO Variables
>  SNES :: snes
>  integer :: it
>  PetscReal :: xnorm
>  PetscReal :: gnorm
>  PetscReal :: fnorm
>  SNESConvergedReason :: reason
>  type(Solver_t) :: this
>  PetscErrorCode :: ierr
>  ! Local Variables
>  Vec :: X, dX
>  Vec :: F, W, G
>  real(WP) :: lambda
>  print*, 'Calling custom test',it,xnorm,fnorm,gnorm
>  !call SNESLineSearchGetLambda(this%linesearch, lambda, ierr)
>  !call SNESLineSearchGetVecs(this%linesearch, X, F, dX, W, G, ierr)
>  !call this%SNESConvergenceTest(it, fnorm, lambda, X, dX, reason, ierr)
>  reason = SNES_DIVERGED_FUNCTION_COUNT
> end subroutine SNESConvergenceTest_snes
> 
> Code works fine if  the call at Line 1 is commented i.e, if i donot
> set the convergencetest
> 
> I have attached the stack trace when the code fails (traceFail.log)
> and stack trace of the code which runs well (tracePass.log).
> 
> 
> 
> Thanks
> Reddy
> <traceFail.log><tracePass.log>



More information about the petsc-users mailing list