- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

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

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

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

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page