Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Tianyu_D_
Beginner
69 Views

How to use DSS to handle a full matrix

Jump to solution

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
      
      

 

 

0 Kudos
1 Solution
Gennady_F_Intel
Moderator
69 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.

View solution in original post

4 Replies
Gennady_F_Intel
Moderator
69 Views

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

Tianyu_D_
Beginner
69 Views

Hi Gennady, I am using MKL 11.0.

 

 

Gennady_F_Intel
Moderator
70 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.

View solution in original post

Tianyu_D_
Beginner
69 Views

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.

 

Reply