When using configure options: --with-fortran-kernels=1
--with-fortran=1, the build fails with the following errors.
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c: In function
'PetscErrorCode MatMultTransposeAdd_SeqAIJ(Mat, Vec, Vec, Vec)':
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1265:52: error:
invalid conversion from 'const void*' to 'void*' [-fpermissive]
fortranmulttransposeaddaij_(&m,x,a->i,a->j,a->a,y);
^
In file included from
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1240:0:
/home/vijaysm/code/petsc/include/../src/mat/impls/aij/seq/ftn-kernels/fmult.h:14:19:
error: initializing argument 2 of 'void
fortranmulttransposeaddaij_(PetscInt*, void*, PetscInt*, PetscInt*,
void*, void*)' [-fpermissive]
PETSC_EXTERN void
fortranmulttransposeaddaij_(PetscInt*,void*,PetscInt*,PetscInt*,void*,void*);
^
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c: In function
'PetscErrorCode MatMultAdd_SeqAIJ(Mat, Vec, Vec, Vec)':
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1601:41: error:
invalid conversion from 'const PetscInt* {aka const int*}' to
'PetscInt* {aka int*}' [-fpermissive]
fortranmultaddaij_(&m,x,ii,aj,aa,y,z);
^
In file included from
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1562:0:
/home/vijaysm/code/petsc/include/../src/mat/impls/aij/seq/ftn-kernels/fmultadd.h:11:19:
error: initializing argument 3 of 'void
fortranmultaddaij_(PetscInt*, const void*, PetscInt*, PetscInt*, const
MatScalar*, void*, void*)' [-fpermissive]
PETSC_EXTERN void fortranmultaddaij_(PetscInt*,const
void*,PetscInt*,PetscInt*,const MatScalar*,void*,void*);
^
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1601:41: error:
invalid conversion from 'const PetscInt* {aka const int*}' to
'PetscInt* {aka int*}' [-fpermissive]
fortranmultaddaij_(&m,x,ii,aj,aa,y,z);
^
In file included from
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/aij.c:1562:0:
/home/vijaysm/code/petsc/include/../src/mat/impls/aij/seq/ftn-kernels/fmultadd.h:11:19:
error: initializing argument 4 of 'void
fortranmultaddaij_(PetscInt*, const void*, PetscInt*, PetscInt*, const
MatScalar*, void*, void*)' [-fpermissive]
PETSC_EXTERN void fortranmultaddaij_(PetscInt*,const
void*,PetscInt*,PetscInt*,const MatScalar*,void*,void*);
^
CXX standalone_test/obj/src/mat/impls/aij/seq/cholmod/aijcholmod.o
CXX standalone_test/obj/src/mat/impls/aij/seq/ftn-auto/aijf.o
CXX standalone_test/obj/src/mat/impls/aij/seq/crl/crl.o
gmake[2]: *** [standalone_test/obj/src/mat/impls/aij/seq/aij.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/crl/crl.c: In function
'PetscErrorCode MatMult_AIJCRL(Mat, Vec, Vec)':
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/crl/crl.c:133:43:
error: invalid conversion from 'const PetscScalar* {aka const
double*}' to 'PetscScalar* {aka double*}' [-fpermissive]
fortranmultcrl_(&m,&rmax,x,y,icols,acols);
^
In file included from
/home/vijaysm/code/petsc/src/mat/impls/aij/seq/crl/crl.c:94:0:
/home/vijaysm/code/petsc/include/../src/mat/impls/aij/seq/crl/ftn-kernels/fmultcrl.h:10:19:
error: initializing argument 3 of 'void fortranmultcrl_(PetscInt*,
PetscInt*, PetscScalar*, PetscScalar*, PetscInt*, PetscScalar*)'
[-fpermissive]
PETSC_EXTERN void
fortranmultcrl_(PetscInt*,PetscInt*,PetscScalar*,PetscScalar*,PetscInt*,PetscScalar*);
^
gmake[2]: *** [standalone_test/obj/src/mat/impls/aij/seq/crl/crl.o] Error 1
Looks like some const related changes in the API didn't propagate onto
the fortran kernels. The attached patch fixes it. If you need any
logs, let me know.
Vijay
diff --git a/src/mat/impls/aij/seq/crl/ftn-kernels/fmultcrl.h b/src/mat/impls/aij/seq/crl/ftn-kernels/fmultcrl.h
index f0b1916..4b74346 100644
--- a/src/mat/impls/aij/seq/crl/ftn-kernels/fmultcrl.h
+++ b/src/mat/impls/aij/seq/crl/ftn-kernels/fmultcrl.h
@@ -7,7 +7,7 @@
#elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
#define fortranmultcrl_ fortranmultcrl
#endif
-PETSC_EXTERN void fortranmultcrl_(PetscInt*,PetscInt*,PetscScalar*,PetscScalar*,PetscInt*,PetscScalar*);
+PETSC_EXTERN void fortranmultcrl_(PetscInt*,PetscInt*,const PetscScalar*,PetscScalar*,PetscInt*,PetscScalar*);
#endif
#endif
diff --git a/src/mat/impls/aij/seq/ftn-kernels/fmult.h b/src/mat/impls/aij/seq/ftn-kernels/fmult.h
index 44a6d36..03e330e 100644
--- a/src/mat/impls/aij/seq/ftn-kernels/fmult.h
+++ b/src/mat/impls/aij/seq/ftn-kernels/fmult.h
@@ -11,7 +11,7 @@
#endif
PETSC_EXTERN void fortranmultaij_(PetscInt*,const PetscScalar*,const PetscInt*,const PetscInt*,const MatScalar*,PetscScalar*);
-PETSC_EXTERN void fortranmulttransposeaddaij_(PetscInt*,void*,PetscInt*,PetscInt*,void*,void*);
+PETSC_EXTERN void fortranmulttransposeaddaij_(PetscInt*,const void*,PetscInt*,PetscInt*,void*,void*);
#endif
#endif
diff --git a/src/mat/impls/aij/seq/ftn-kernels/fmultadd.h b/src/mat/impls/aij/seq/ftn-kernels/fmultadd.h
index ac490a9..daba803 100644
--- a/src/mat/impls/aij/seq/ftn-kernels/fmultadd.h
+++ b/src/mat/impls/aij/seq/ftn-kernels/fmultadd.h
@@ -8,7 +8,7 @@
#define fortranmultaddaij_ fortranmultaddaij
#endif
-PETSC_EXTERN void fortranmultaddaij_(PetscInt*,const void*,PetscInt*,PetscInt*,const MatScalar*,void*,void*);
+PETSC_EXTERN void fortranmultaddaij_(PetscInt*,const void*,const PetscInt*,const PetscInt*,const MatScalar*,void*,void*);
#endif
#endif