- 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