Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

## How to use DSS to handle a full matrix

Beginner
502 Views

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')
!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')
!CLOSE(10)
!
!OPEN (UNIT=10, FILE='rowIndex.dat')
!CLOSE(10)
!
!OPEN (UNIT=10, FILE='values.dat')
!CLOSE(10)
!
!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

```

1 Solution
Moderator
502 Views

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.

4 Replies
Moderator
502 Views

Tianyu, thanks for report. What MKL version do you use?

Beginner
502 Views

Hi Gennady, I am using MKL 11.0.

Moderator
503 Views

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.

Beginner
502 Views

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.