[petsc-dev] fortran binding for TSConvergedReason

Satish Balay balay at mcs.anl.gov
Thu Oct 27 14:57:12 CDT 2011


Can you do the following and configure/rebuild petsc-dev - and see if
the error goes away?

rm -rf externalpacakges/sowing* PETSC_ARCH/conf/sowing

Satish

On Thu, 27 Oct 2011, Blaise Bourdin wrote:

> Hi,
> 
> Thanks for all the help in tracking our issue with TS... I think that  there is a small problem with the auto binding for TSGetConvergedReason (both dev and 3.2).
> I added a call to TSGetConvergedReason after the TSSolve in ex22f.F and get the following result:
> 
> (gdb) cont
> Continuing.
> [0]PETSC ERROR: TSGetConvergedReason() line 2755 in /opt/HPC/petsc-dev/src/ts/interface/ts.c Invalid Pointer: Parameter # 2
> 
> Program received signal SIGABRT, Aborted.
> 0x00007fff98e4e82a in __kill ()
> (gdb) where
> #0  0x00007fff98e4e82a in __kill ()
> #1  0x00007fff975f7a9c in abort ()
> #2  0x0000000105bcbd52 in PetscAbortErrorHandler (comm=1140850689, line=2755, fun=0x10691bb70 'TSGetConvergedReason\000', file=0x10691ae38 '/opt/HPC/petsc-dev/src/ts/interface/ts.c\000', dir=0x1068be9a0 '\000', n=68, p=Invalid F77 type code 5 in symbol table.
> ) at errabort.c:62
> #3  0x0000000105bc4ce4 in PetscError (comm=1140850689, line=2755, func=0x10691bb70 'TSGetConvergedReason\000', file=0x10691ae38 '/opt/HPC/petsc-dev/src/ts/interface/ts.c\000', dir=0x1068be9a0 '\000', n=68, p=Invalid F77 type code 5 in symbol table.
> ) at err.c:356
> #4  0x000000010689e86b in TSGetConvergedReason (ts=0x7f7fab8e4370, reason=0x162f727375) at ts.c:2755
> #5  0x000000010682772d in tsgetconvergedreason_ (ts=0x7fff656ccf80, reason=0x7fff656ccf8c, __ierr=0x7fff656ccfa8) at tsf.c:433
> #6  0x0000000105ad037a in MAIN__ () at ex22f.F:127
> #7  0x0000000105ad0426 in main (argc=3, argv=0x7fff656cd208 './ex22f\000') at ex22f.F:137
> 
> 
> 
> 
> If I replace te current binding in src/ts/interface/ftn-auto/tsf.c (yes, I know I am not supposed to do that):
> void PETSC_STDCALL  tsgetconvergedreason_(TS ts,TSConvergedReason *reason, int *__ierr ){
> *__ierr = TSGetConvergedReason(
>         (TS)PetscToPointer((ts) ),
>         (TSConvergedReason* )PetscToPointer((reason) ));
> 
> with this one:
> void PETSC_STDCALL  tsgetconvergedreason_(TS ts,TSConvergedReason *reason, int *__ierr ){
> *__ierr = TSGetConvergedReason(
>         (TS)PetscToPointer((ts) ),
>         reason);
> }
> 
> everything seems to work OK. Does this function need a custom binding?
> 
> And also, the man page for TSGetConvergedReason states "see TSConvergedReason or the manual pages for the individual convergence tests for complete lists", but this man page does not seem to exist.
> 
> Thanks,
> 
> Blaise
> 
> 




More information about the petsc-dev mailing list