[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