- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
Hi there,
I have a program which will randomly generate cases with linear equations to be solved. For most of the cases, the linear equations will be sparse. So I use the DSS to solve them. But when it involves a full matrix problem.The DSS will stack at the dss_reorder and shows forrtl: severe (157): Program Exception -access violation.
Can anyone tell me how to fix this problem in an efficient way? I don't want to add too much codes to check if the matrix is full and add additional routine for the full matrix case.
The attached is my test case for the full matrix problem. Your help will be greatly appreciated.
Thanks!
Tianyu
PROGRAM Test
INCLUDE 'mkl_dss.f77'
INTEGER tIU(:), tJU(:), Idum(:), ITER
DOUBLE PRECISION tUM(:), tXDIFF(:), tX(:)
ALLOCATABLE tIU, tJU, tUM, tXDIFF, tX, Idum
INTEGER nNonZeros,nRow
INTEGER*8 handle
INTEGER error
!OPEN (UNIT=10, FILE='testInfo.dat')
!READ (10,7004) nNonZeros, nRow
!CLOSE(10)
nRow=2
nNonZeros=4
ALLOCATE(tIU(nRow+1))
ALLOCATE(tXDIFF(nRow))
ALLOCATE(tX(nRow))
ALLOCATE(tJU(nNonZeros))
ALLOCATE(tUM(nNonZeros))
ALLOCATE(Idum(nRow))
tJU(1)=1
tJU(2)=2
tJU(3)=1
tJU(4)=2
tIU(1)=1
tIU(2)=3
tIU(3)=5
tUM(1)=0.0751
tUM(2)=0.0116
tUM(3)=0.0116
tUM(4)=-0.0751
tXDIFF(1)=1
tXDIFF(2)=0
!OPEN (UNIT=10, FILE='columns.dat')
!READ (10,7002) (tJU(II),II=1,nNonZeros)
!CLOSE(10)
!
!OPEN (UNIT=10, FILE='rowIndex.dat')
!READ (10,7002) (tIU(II),II=1,nRow+1)
!CLOSE(10)
!
!OPEN (UNIT=10, FILE='values.dat')
!READ (10,7001) (tUM(II),II=1,nNonZeros)
!CLOSE(10)
!
!OPEN (UNIT=10, FILE='loadVector.dat')
!READ (10,7001) (tXDIFF(II),II=1,nRow)
!CLOSE(10)
ITER=1
C---------------------------------------------------------------------------
C Initialize the solver
C---------------------------------------------------------------------------
error = dss_create(handle, MKL_DSS_DEFAULTS+MKL_DSS_OOC_VARIABLE)
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
C---------------------------------------------------------------------------
C---------------------------------------------------------------------------
C Define the non-zero structure of the matrix
C---------------------------------------------------------------------------
! error = dss_define_structure( handle, MKL_DSS_SYMMETRIC,
!& tIU, nRow, nRow, tJU, nNonZeros )
error = dss_define_structure( handle, MKL_DSS_NON_SYMMETRIC,
& tIU, nRow, nRow, tJU, nNonZeros )
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
C---------------------------------------------------------------------------
C---------------------------------------------------------------------------
C Reorder the matrix
C---------------------------------------------------------------------------
IF (ITER.EQ.1) THEN
error = dss_reorder( handle, MKL_DSS_GET_ORDER, Idum)
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
ELSE
error = dss_reorder( handle, MKL_DSS_MY_ORDER, Idum)
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
ENDIF
C---------------------------------------------------------------------------
C Factor the matrix
C---------------------------------------------------------------------------
error = dss_factor_real( handle, MKL_DSS_DEFAULTS, tUM)
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
C---------------------------------------------------------------------------
C Get the solution vector
C---------------------------------------------------------------------------
error = dss_solve_real( handle, MKL_DSS_DEFAULTS,
& tXDIFF, 1, tX)
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
C---------------------------------------------------------------------------
C---------------------------------------------------------------------------
C Deallocate solver storage
C---------------------------------------------------------------------------
error = dss_delete( handle, MKL_DSS_DEFAULTS )
IF (error .NE. MKL_DSS_SUCCESS ) GOTO 999
C---------------------------------------------------------------------------
OPEN (UNIT=10, FILE='OutValues.dat')
WRITE (10,7005) (tX(II),II=1,nRow)
CLOSE(10)
GOTO 1999
7001 FORMAT(1X,D)
7002 FORMAT(1X,I5)
7003 FORMAT(1X,I,1X,D)
7004 FORMAT(1X,I,1X,I)
7005 FORMAT(1X,D)
999 WRITE(*,*) "Solver returned error code ", error
1999 DEALLOCATE(tIU,tJU,tUM,tXDIFF,tX,Idum)
END
- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
it really failed with version 11.0. Checking with the latest MKL v.11.3.3, I don't see problem - below the output ( I slightly modified the code by adding error status and mkl version )
Intel(R) Math Kernel Library Version 11.3.3 Product Build 20160413 for Intel(R) 64 architecture applications
(1)...dss_create == 0
(2)...dss_define_structure == 0
(3)...dss_reoder == 0
(4) ...dss_factor_real == 0
(5)...dss_solve_real == 0
(6)...dss_delete == 0
the updates file is also attached.
Enlace copiado
- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
Tianyu, thanks for report. What MKL version do you use?
- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
Hi Gennady, I am using MKL 11.0.
- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
it really failed with version 11.0. Checking with the latest MKL v.11.3.3, I don't see problem - below the output ( I slightly modified the code by adding error status and mkl version )
Intel(R) Math Kernel Library Version 11.3.3 Product Build 20160413 for Intel(R) 64 architecture applications
(1)...dss_create == 0
(2)...dss_define_structure == 0
(3)...dss_reoder == 0
(4) ...dss_factor_real == 0
(5)...dss_solve_real == 0
(6)...dss_delete == 0
the updates file is also attached.
- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Informe de contenido inapropiado
Thanks Gennady.
Actually, I have extended the full matrix into a sparse matrix by adding one more row and of course one more column as well. In that way, DSS in MKL 11.0 works.
- Suscribirse a un feed RSS
- Marcar tema como nuevo
- Marcar tema como leído
- Flotar este Tema para el usuario actual
- Favorito
- Suscribir
- Página de impresión sencilla