Community
cancel
Showing results for
Did you mean:
Beginner
154 Views

## Pardiso and pardiso_64

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

1 Solution
Employee
154 Views

Hi Mehdi,

The error means you're touching memory which you're not allowed to. You probably read/write outside of bounds, my advice is:

1. Add -i8 compiler option for ifort.
2. If above suggestion no help, please add "-check bounds" option. If you get error message, please paste it to me.

Best regards,
Fiona

Employee
155 Views

Hi Mehdi,

The error means you're touching memory which you're not allowed to. You probably read/write outside of bounds, my advice is:

1. Add -i8 compiler option for ifort.
2. If above suggestion no help, please add "-check bounds" option. If you get error message, please paste it to me.

Best regards,
Fiona