- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

I want to use the direct sparse solver with the intel fortran interface from the mkl library.

The matrix I want to invert is symmetric complex non-hermitian.

Can someone give me a hint what the correct option in dss_define_structure, dss_factor_complex would be.

I use a 64bit linux cluster version of mkl10.

I tried the following:

...

error = DSS_CREATE( handle, MKL_DSS_DEFAULTS )

if(error /= MKL_DSS_SUCCESS)print*,'ERROR'

error = DSS_DEFINE_STRUCTURE( handle, MKL_DSS_SYMMETRIC, rowindex, ndf_hb, ndf_hb, columns, totnon )

if(error /= MKL_DSS_SUCCESS)print*,'ERROR'

error = DSS_REORDER( handle, MKL_DSS_DEFAULTS, perm )

if(error /= MKL_DSS_SUCCESS)print*,'ERROR'

error = DSS_FACTOR_COMPLEX( handle, MKL_DSS_DEFAULTS, values )

if(error /= MKL_DSS_SUCCESS)print*,'ERROR'

error = DSS_DELETE( handle, MKL_DSS_DEFAULTS )

if(error /= MKL_DSS_SUCCESS)print*,'ERROR'

...

which gives a segmentation fault :

forrtl: severe (174): SIGSEGV, segmentation fault occurred

Image PC Routine Line Source

libpthread.so.0 000000303AC0E9DD Unknown Unknown Unknown

libiomp5.so 00002B734B6A989E Unknown Unknown Unknown

forrtl: severe (174): SIGSEGV, segmentation fault occurred

The size of the input arrays values,columns and rowindex are correct - I checked several times.

Thanks in advance.

Eide

Link Copied

5 Replies

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

would you please show the libraries which you use for linking this example.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

I used the dss_sym_f90 from the example directory coming with the mkl lib as a template.

In the source code I have:

INCLUDE 'mkl_dss.f90' as the first line

and

use mkl_dss

to compile I use the following:

ifort -w -I/prog/Intel/mkl10cluster/include -fpp *.f90 -L/prog/Intel/mkl10cluster/lib/em64t /prog/Intel/mkl10cluster/lib/em64t/libmkl_solver_lp64.a /prog/Intel/mkl10cluster/lib/em64t/libmkl_intel_lp64.a -Wl,--start-group /prog/Intel/mkl10cluster/lib/em64t/libmkl_intel_thread.a /prog/Intel/mkl10cluster/lib/em64t/libmkl_core.a -Wl,--end-group -L/prog/Intel/mkl10cluster/lib/em64t -liomp5 -lpthread -lm -o x_out

which i took from the makefile in the example directory.

Thanks for your help.

Eide

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

pow of determinant is 0.000

base of determinant is 2.250

Determinant is 2.250

Solution Array: -326.333 983.000 163.417 398.000 61.500

--Gennady

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

I used the dss_sym_f90 just as a template of how to use the solver. My problem is different in some characteristics.

The matrix I want to solve is 210000 by 210000 with ca 23 * 10**6 non zero entries, symmetric with complex values on the diagonal(therefore non-hermitian). In the array "values" I did put all non zero values(not just the upper triangle).

When I put all non zero elements in the "values" arrays do I have to choose MKL_DSS_NON_SYMMETRIC in the line with:

error = DSS_DEFINE_STRUCTURE( handle, MKL_DSS_SYMMETRIC, rowindex, ndf_hb, ndf_hb, columns, totnon )

????

And if so - what would be the corresponding option in the dss_solve_complex line. There are 4 possibilities:

The `opt` argument should contain one of the following options:

MKL_DSS_POSITIVE_DEFINITE,

MKL_DSS_INDEFINITE,

MKL_DSS_HERMITIAN_POSITIVE_DEFINITE,

MKL_DSS_HERMITIAN_INDEFINITE ,

http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/win/mkl/refman/ssr/ssr_DSSIntro.html

Or can dss not solve a symmetric, complex, non-hermitian linear system ?

Thanks in advance.

(btw the example dss_sym_f90 works also on my system with the same result as you get)

Eide

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

the solution if you have a symmetric non hermitian matrix is:

1) put all non zero elements in the input array (not only the upper triangle)

2) declare the structure as non symmetric (although it's symmetric)

-> DSS_DEFINE_STRUCTURE( handle, MKL_DSS_NON_SYMMETRIC, rowindex, nrows, nrows, columns, totalnonzero)

3) choose the correct factorzation - in this case LDL^T

-> DSS_FACTOR_COMPLEX( handle, MKL_DSS_POSITIVE_DEFINITE, values)

It works fine : )

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page