Hello,
I have a FORTRAN program for solving flow field (Stokes flow) problem using FEM. Firstly, I used PARDISO solver to solve the coupled problem. I was totally happy with PARDISO, because it is faster than MATLAB (I used to work with MATLAB and I am new in ifort). Bellow, I have summarized the command related to PARDISO:
!----------Matrix solution PARDISO--------------------------------------------
! [M ]*{X} = {RHS}
INTEGER :: PT(64), MTYPE, IPARM(64)
INTEGER :: MAXFCT,MNUM,PHASE,N , NRHS , MSGLVL , ERROR
INTEGER,ALLOCATABLE :: PERM(:)
REAL(8),ALLOCATABLE :: X(:)
INTEGER,ALLOCATABLE :: ja(:) , ia(:)
REAL(8),ALLOCATABLE,DIMENSION(:) :: M
! ABOVE FOR INTRODUCING THE PARAMETERS
MTYPE = 11
CALL PARDISOINIT (PT, MTYPE, IPARM)
ALLOCATE( PERM(dof) , STAT = ISTAT ) ! dof : degree of freedom
ALLOCATE( X(dof) , STAT = ISTAT )
MAXFCT = 1
MNUM = 1
PHASE = 13
N = dof
PERM = 1
NRHS = 1
MSGLVL = 0
CALL CPU_TIME(start)
CALL PARDISO (PT, MAXFCT, MNUM, MTYPE, PHASE, N, M_SPARSE, ia,ja, PERM, NRHS, IPARM, MSGLVL, RHS, X, ERROR)
CALL CPU_TIME(finish)
write(*,*) (finish-start)*1000 , 'msec' , ERROR
This code works without any problem and perfectly.
My problem is for the situation that I want to use PARDISO_64. According to the document, all of the input and output integers, should be INTEGER(8), therefore:
!----------Matrix solution PARDISO--------------------------------------------
! MX = RHS
INTEGER(8) :: PT(64), MTYPE, IPARM(64)
INTEGER(8) :: MAXFCT,MNUM,PHASE,N , NRHS , MSGLVL , ERROR
INTEGER(8),ALLOCATABLE :: PERM(:)
REAL(8),ALLOCATABLE :: X(:)
INTEGER(8),ALLOCATABLE :: ja(:) , ia(:)
REAL(8),ALLOCATABLE,DIMENSION(:) :: M
! ABOVE FOR INTRODUCING THE PARAMETERS
MTYPE = 11
CALL PARDISOINIT (PT, MTYPE, IPARM)
ALLOCATE( PERM(dof) , STAT = ISTAT ) ! dof : degree of freedom
ALLOCATE( X(dof) , STAT = ISTAT )
MAXFCT = 1
MNUM = 1
PHASE = 13
N = dof
PERM = 1
NRHS = 1
MSGLVL = 0
CALL CPU_TIME(start)
CALL PARDISO_64 (PT, MAXFCT, MNUM, MTYPE, PHASE, N, M_SPARSE, ia,ja, PERM, NRHS, IPARM, MSGLVL, RHS, X, ERROR)
CALL CPU_TIME(finish)
write(*,*) (finish-start)*1000 , 'msec' , ERROR
but, this code does not working and it gives the following error:
forrtl: server (157): program Exception – access violation
I use the following to compile my code:
ifort USEFULLS.f90 CONSTANTS.f90 PRE_PROCESSOR_3D.f90 DATATYPES.f90 VEL_SUBS.f90 SPARSE_SUB.f90 main00.f90 -o t1 -Qmkl -heap-arrays
USEFULLS.f90, CONSTANTS.f90, PRE_PROCESSOR_3D.f90, DATATYPES.f90, VEL_SUBS.f90, and SPARSE_SUB.f90 are modules that are developed by me and main00.f90 is the main program. I think (I am not sure) that I must use some other keys in my compile command line.
I have similar problem for cluster_sparse_solver, which works well, but cluster_sparse_solver_64 does not work!!!!!!
Best regards
Mehdi