Intel Fortran & MKL version compilers_and_libraries_2018.5.274
I have built a routine based on the sample code dss_sym_f90.f90 to solve large FE matrices. My routine works with the supplied matrix but fails with my own.
DSS_CREATE, DSS_STRUCTURE and DSS_REORDER all return error=0 but DSS_FACTOR_REAL returns error -13 (which is MKL_DSS_TERM_LVL_ERR) but I cannot find any explanation of what this error means. Is there any way of extracting more information about what is causing the error?
If I call DSS_CREATE with opt set explicitly to the default value:
opt=MKL_DSS_MSG_LVL_WARNING + MKL_DSS_TERM_LVL_ERROR
I then get error -13 from DSS_CREATE.
If there are errors in the arguments passed to the DSS solver routines, it is normal and desirable to receive an error status.
Similarly, if the square matrix passed to DSS is singular, failure is to be expected.
If you provide a simple example code and data files if needed for reading in the matrix, we can look at why the failure occurred.
- failure is to be expected. If you provide a simple example code and data files if needed for reading in the matrix
- if the square matrix passed to DSS is singular
- If there are errors in the arguments passed to the DSS solver routines
- it is normal and desirable to receive an error status. Similarly
- we can look at why the failure occurred.
Thanks for your reply.
Overnight I installed the latest version of the MKL library from compilers_and_libraries_2020.4.304.
This prints a more informative error:
MKL-DSS-DSS-Error, Zero pivot detected
but does not pass a code back to the calling routine to allow it to do something about it.
Is there any way of interrogating DSS to give additional information such as what the error was and which row the zero pivot occured on?
I tried setting the verbose mode with MKL_VERBOSE but that doesn't appear to give any more information.
First, I encourage you to abandon DSS API and switch to PARDISO API. There's only one feature which DSS has and PARDISO does not. And PARDISO is much more easier to understand since DSS API just adds a level of indirection and implicitly sets all the parameters for PARDISO and thus hides them.
And you just hit a very good reason for switching to PARDISO API when you got "mysterious" DSS errors. Btw, e.g., for "zero pivot detected" error, PARDISO API will likely return the number of zero pivots. Unfortunately, as the matrix get reordered, we don't output information as to exact places where zero pivots detected. Though you can do some clever tricks with the user-defined pivot control function, see https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top/...
Second, as @mecej4 pointed out, it would be really much easier for us to help you if you provided a minimal reproducer.