Quantcast
Channel: Intel® Software - Intel® oneAPI Math Kernel Library & Intel® Math Kernel Library
Viewing all articles
Browse latest Browse all 3005

How to use DSS to handle a full matrix

$
0
0

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


 

 


Viewing all articles
Browse latest Browse all 3005

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>