Dmitry,

   I have completed and tested the branch 
barry/2020-01-15/support-default-integer-8 it  is undergoing testing now 
https://gitlab.com/petsc/petsc/merge_requests/2456  

   Please give it a try. Note that MPI has no support for integer promotion so 
YOU must insure that any MPI calls from Fortran pass 4 byte integers not 
promoted 8 byte integers. 

   I have tested it with recent versions of MPICH and OpenMPI, it is fragile at 
compile time and may fail to compile with different versions of MPI. 

    Good luck,

   Barry

    I do not recommend this approach for integer promotion in Fortran. Just 
blindly promoting all integers can often lead to problems. I recommend using 
the kind mechanism of 
Fortran to insure that each variable is the type you want, you can recompile 
with different options to promote the kind  declared variables you wish. Of 
course this is more intrusive and requires changes to the Fortran code. 

> On Jan 15, 2020, at 7:00 AM, Дмитрий Мельничук 
> <dmitry.melnic...@geosteertech.com> wrote:
> 
> Hello all!
>  
> At present time I need to compile solver called Defmod 
> (https://bitbucket.org/stali/defmod/wiki/Home), which is written in Fortran 
> 95.
> Defmod uses PETSc for solving linear algebra system.
> Solver compilation with 32-bit version of PETSc does not cause any problem. 
> But solver compilation with 64-bit version of PETSc produces an error with 
> size of ierr PETSc variable. 
>  
> 1. For example, consider the following statements written in Fortran:
>  
>  
> PetscErrorCode :: ierr_m
> PetscInt :: ierr
> ...
> ...
> call VecDuplicate(Vec_U,Vec_Um,ierr) 
> call VecCopy(Vec_U,Vec_Um,ierr)
> call VecGetLocalSize(Vec_U,j,ierr)
> call VecGetOwnershipRange(Vec_U,j1,j2,ierr_m)
>  
>  
> As can be seen first three subroutunes require ierr to be size of INTEGER(8), 
> while the last subroutine (VecGetOwnershipRange) requires ierr to be size of 
> INTEGER(4).
> Using the same integer format gives an error:
>  
> There is no specific subroutine for the generic ‘vecgetownershiprange’ at (1)
>  
> 2. Another example is:
>  
>  
> call MatAssemblyBegin(Mat_K,Mat_Final_Assembly,ierr)
> CHKERRA(ierr)
> call MatAssemblyEnd(Mat_K,Mat_Final_Assembly,ierr)
>  
>  
> I am not able to define an appropriate size if ierr in CHKERRA(ierr). If I 
> choose INTEGER(8), the error "Type mismatch in argument ‘ierr’ at (1); passed 
> INTEGER(8) to INTEGER(4)" occurs.
> If I define ierr  as INTEGER(4), the error "Type mismatch in argument ‘ierr’ 
> at (1); passed INTEGER(4) to INTEGER(8)" appears.
>  
>  
> 3. If I change the sizes of ierr vaiables as error messages require, the 
> compilation completed successfully, but an error occurs when calculating the 
> RHS vector with following message:
> 
> [0]PETSC ERROR: Out of range index value -4 cannot be negative 
>  
> 
> Command to configure 32-bit version of PETSc under Windows 10 using Cygwin:
> ./configure --with-cc=x86_64-w64-mingw32-gcc 
> --with-cxx=x86_64-w64-mingw32-g++ --with-fc=x86_64-w64-mingw32-gfortran 
> --download-fblaslapack --with-mpi-include=/cygdrive/c/MPISDK/Include 
> --with-mpi-lib=/cygdrive/c/MPISDK/Lib/libmsmpi.a 
> --with-mpi-mpiexec=/cygdrive/c/MPI/Bin/mpiexec.exe --with-debugging=yes 
> -CFLAGS='-O2' -CXXFLAGS='-O2' -FFLAGS='-O2 -static-libgfortran -static 
> -lpthread -fno-range-check' --with-shared-libraries=no
>  
> Command to configure 64-bit version of PETSc under Windows 10 using Cygwin:
> ./configure --with-cc=x86_64-w64-mingw32-gcc 
> --with-cxx=x86_64-w64-mingw32-g++ --with-fc=x86_64-w64-mingw32-gfortran 
> --download-fblaslapack --with-mpi-include=/cygdrive/c/MPISDK/Include 
> --with-mpi-lib=/cygdrive/c/MPISDK/Lib/libmsmpi.a 
> --with-mpi-mpiexec=/cygdrive/c/MPI/Bin/mpiexec.exe --with-debugging=yes 
> -CFLAGS='-O2' -CXXFLAGS='-O2' -FFLAGS='-O2 -static-libgfortran -static 
> -lpthread -fno-range-check -fdefault-integer-8' --with-shared-libraries=no 
> --with-64-bit-indices --known-64-bit-blas-indices
> 
>  
> Kind regards,
> Dmitry Melnichuk

Reply via email to