I am trying to upgrade my code to PETSc 3.22.4 (the code was last updated to 3.19.4 or perhaps 3.18.1, I've lost track). I've been using this code with PETSc for over 20 years.

To get my code to compile and link during this update, I only need to make two changes; one was to use PetscViewerPushFormat instead of PetscViewerSetFormat and the other was to use PETSC_NULL_INTEGER_ARRAY in a spot or two.

When I run the code however, I am getting an error very early on during a call to MatCreate near the beginning of the code.  The screen output says:

   [3]PETSC ERROR: matcreate_() at
   /Users/sg/petsc-3.22.4/gnug/src/mat/utils/ftn-auto/gcreatef.c:101
   Cannot create PETSC_NULL_XXX object
   [0]PETSC ERROR: matcreate_() at
   /Users/sg/petsc-3.22.4/gnug/src/mat/utils/ftn-auto/gcreatef.c:101
   Cannot create PETSC_NULL_XXX object
   [1]PETSC ERROR: matcreate_() at
   /Users/sg/petsc-3.22.4/gnug/src/mat/utils/ftn-auto/gcreatef.c:101
   Cannot create PETSC_NULL_XXX object
   [2]PETSC ERROR: matcreate_() at
   /Users/sg/petsc-3.22.4/gnug/src/mat/utils/ftn-auto/gcreatef.c:101
   Cannot create PETSC_NULL_XXX object

I have a 4 processor run going.  I am running with -on_error_attach_debugger but the debugger is giving me cryptic (at least to me) output (the same for all 4 processes modulo the PID). Stack traces seem to be unavailable :(

   lldb  -p 71963
   (lldb) process attach --pid 71963
   Process 71963 stopped
   * thread #1, queue = 'com.apple.main-thread', stop reason = signal
   SIGSTOP
        frame #0: 0x00007fff69d92746
   libsystem_kernel.dylib`__semwait_signal + 10
   libsystem_kernel.dylib`__semwait_signal:
   ->  0x7fff69d92746 <+10>: jae 0x7fff69d92750            ; <+20>
        0x7fff69d92748 <+12>: movq   %rax, %rdi
        0x7fff69d9274b <+15>: jmp    0x7fff69d9121d            ; cerror
        0x7fff69d92750 <+20>: retq
   Target 0: (feap) stopped.

   Executable module set to "/Users/sg/Feap/ver87/parfeap/feap".
   Architecture set to: x86_64h-apple-macosx-.

Does anyone have any hints as to what may be going on?  Note the program starts normally and i can do stuff with the interactive interface for the code -- even plotting the mesh etc. so I believe the input data has been read in correctly.  The crash only occurs when I initiate the formation of the matrix.

I am attaching the /Users/sg/petsc-3.22.4/gnug/src/mat/utils/ftn-auto/gcreatef.c file in case that offers some insight.

Note, I have been
-sanjay

--
#include "petscsys.h"
#include "petscfix.h"
#include "petsc/private/fortranimpl.h"
/* gcreate.c */
/* Fortran interface file */

/*
* This file was generated automatically by bfort from the C source
* file.  
 */

#ifdef PETSC_USE_POINTER_CONVERSION
#if defined(__cplusplus)
extern "C" { 
#endif 
extern void *PetscToPointer(void*);
extern int PetscFromPointer(void *);
extern void PetscRmPointer(void*);
#if defined(__cplusplus)
} 
#endif 

#else

#define PetscToPointer(a) (a ? *(PetscFortranAddr *)(a) : 0)
#define PetscFromPointer(a) (PetscFortranAddr)(a)
#define PetscRmPointer(a)
#endif

#include "petscmat.h"
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matcreate_ MATCREATE
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matcreate_ matcreate
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matcreatefromoptions_ MATCREATEFROMOPTIONS
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matcreatefromoptions_ matcreatefromoptions
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matseterroriffailure_ MATSETERRORIFFAILURE
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matseterroriffailure_ matseterroriffailure
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matsetsizes_ MATSETSIZES
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matsetsizes_ matsetsizes
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matsetfromoptions_ MATSETFROMOPTIONS
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matsetfromoptions_ matsetfromoptions
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matxaijsetpreallocation_ MATXAIJSETPREALLOCATION
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matxaijsetpreallocation_ matxaijsetpreallocation
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matheaderreplace_ MATHEADERREPLACE
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matheaderreplace_ matheaderreplace
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matbindtocpu_ MATBINDTOCPU
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matbindtocpu_ matbindtocpu
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matboundtocpu_ MATBOUNDTOCPU
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matboundtocpu_ matboundtocpu
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matsetvaluescoo_ MATSETVALUESCOO
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matsetvaluescoo_ matsetvaluescoo
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matsetbindingpropagates_ MATSETBINDINGPROPAGATES
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matsetbindingpropagates_ matsetbindingpropagates
#endif
#ifdef PETSC_HAVE_FORTRAN_CAPS
#define matgetbindingpropagates_ MATGETBINDINGPROPAGATES
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) && 
!defined(FORTRANDOUBLEUNDERSCORE)
#define matgetbindingpropagates_ matgetbindingpropagates
#endif
/* Provide declarations for malloc/free if needed for strings */
#include <stdlib.h>


/* Definitions of Fortran Wrapper routines */
#if defined(__cplusplus)
extern "C" {
#endif
PETSC_EXTERN void  matcreate_(MPI_Fint * comm,Mat *A, int *ierr)
{
PETSC_FORTRAN_OBJECT_CREATE(A);
 PetscBool A_null = !*(void**) A ? PETSC_TRUE : PETSC_FALSE;
CHKFORTRANNULLOBJECT(A);
*ierr = MatCreate(
        MPI_Comm_f2c(*(comm)),A);
// if C routine nullifed the object, we must set to to -2 to indicate null set 
in Fortran
if (! A_null && !*(void**) A) * (void **) A = (void *)-2;
}
PETSC_EXTERN void  matcreatefromoptions_(MPI_Fint * comm, char *prefix,PetscInt 
*bs,PetscInt *m,PetscInt *n,PetscInt *M,PetscInt *N,Mat *A, int *ierr, 
PETSC_FORTRAN_CHARLEN_T cl0)
{
  char *_cltmp0 = PETSC_NULLPTR;
PetscBool A_null = !*(void**) A ? PETSC_TRUE : PETSC_FALSE;
CHKFORTRANNULLOBJECT(A);
/* insert Fortran-to-C conversion for prefix */
  FIXCHAR(prefix,cl0,_cltmp0);
*ierr = MatCreateFromOptions(
        MPI_Comm_f2c(*(comm)),_cltmp0,*bs,*m,*n,*M,*N,A);
  FREECHAR(prefix,_cltmp0);
// if C routine nullifed the object, we must set to to -2 to indicate null set 
in Fortran
if (! A_null && !*(void**) A) * (void **) A = (void *)-2;
}
PETSC_EXTERN void  matseterroriffailure_(Mat mat,PetscBool *flg, int *ierr)
{
CHKFORTRANNULLOBJECT(mat);
*ierr = MatSetErrorIfFailure(
        (Mat)PetscToPointer((mat) ),*flg);
}
PETSC_EXTERN void  matsetsizes_(Mat A,PetscInt *m,PetscInt *n,PetscInt 
*M,PetscInt *N, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
*ierr = MatSetSizes(
        (Mat)PetscToPointer((A) ),*m,*n,*M,*N);
}
PETSC_EXTERN void  matsetfromoptions_(Mat B, int *ierr)
{
CHKFORTRANNULLOBJECT(B);
*ierr = MatSetFromOptions(
        (Mat)PetscToPointer((B) ));
}
PETSC_EXTERN void  matxaijsetpreallocation_(Mat A,PetscInt *bs, PetscInt 
dnnz[], PetscInt onnz[], PetscInt dnnzu[], PetscInt onnzu[], int *ierr)
{
CHKFORTRANNULLOBJECT(A);
CHKFORTRANNULLINTEGER(dnnz);
CHKFORTRANNULLINTEGER(onnz);
CHKFORTRANNULLINTEGER(dnnzu);
CHKFORTRANNULLINTEGER(onnzu);
*ierr = MatXAIJSetPreallocation(
        (Mat)PetscToPointer((A) ),*bs,dnnz,onnz,dnnzu,onnzu);
}
PETSC_EXTERN void  matheaderreplace_(Mat A,Mat *C, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
PetscBool C_null = !*(void**) C ? PETSC_TRUE : PETSC_FALSE;
CHKFORTRANNULLOBJECT(C);
*ierr = MatHeaderReplace(
        (Mat)PetscToPointer((A) ),C);
// if C routine nullifed the object, we must set to to -2 to indicate null set 
in Fortran
if (! C_null && !*(void**) C) * (void **) C = (void *)-2;
}
PETSC_EXTERN void  matbindtocpu_(Mat A,PetscBool *flg, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
*ierr = MatBindToCPU(
        (Mat)PetscToPointer((A) ),*flg);
}
PETSC_EXTERN void  matboundtocpu_(Mat A,PetscBool *flg, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
*ierr = MatBoundToCPU(
        (Mat)PetscToPointer((A) ),flg);
}
PETSC_EXTERN void  matsetvaluescoo_(Mat A, PetscScalar coo_v[],InsertMode 
*imode, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
CHKFORTRANNULLSCALAR(coo_v);
*ierr = MatSetValuesCOO(
        (Mat)PetscToPointer((A) ),coo_v,*imode);
}
PETSC_EXTERN void  matsetbindingpropagates_(Mat A,PetscBool *flg, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
*ierr = MatSetBindingPropagates(
        (Mat)PetscToPointer((A) ),*flg);
}
PETSC_EXTERN void  matgetbindingpropagates_(Mat A,PetscBool *flg, int *ierr)
{
CHKFORTRANNULLOBJECT(A);
*ierr = MatGetBindingPropagates(
        (Mat)PetscToPointer((A) ),flg);
}
#if defined(__cplusplus)
}
#endif

Reply via email to