Intel Visual Fortran MKL DSS 求解大型稀疏矩阵方程出错
IVF入门,现需要调用DSS求解大型稀疏矩阵方程,修改了mkl自带的example dss_sym_f.f,仅修改了部分输入数据,可以正常编译,但debug时执行到error = dss_reorder( handle, MKL_DSS_DEFAULTS, idum)
出现中断,显示如下。跪求大神指点。小弟用的是VS 2010 和 Intel Parallel Studio XE 2013。代码和输入数据文件见附件。
我想既然是MKL里面的例子,应该不会有错,只能是矩阵的问题或者是DSS不能求解这个矩阵
MKL里面有pardiso,也是求解系数矩阵的,试试这个函数 拿你的矩阵测试了下,只有SuperLU和MUMPS能求,具体得到的结果我不知道是否正确,但两个求解器的结果一致。
UMFPack和Pardiso都在reorder的时候出错,不知什么原因,求大神解释
我的系统是win32,IVF2013+VS2012,可能是库的编译问题
但pardiso是mkl下的,应该能求解的,但出错了
我有点纳闷的是,你的values的第一个元素为什么会是0? 我想这个问题恐怕不是你的错,你的算例和代码都没有问题。
我在 intel 的论坛发现了去年的一个帖子提及 dss_reorder 出错,后来发布了新版本解决这一问题。但是是 C 接口的。
我不确定是不是 Fotran 的接口没有改。
MKL 是一个商业化的函数库,就算是矩阵问题,也会有良性的错误提示或返回值。而且 reorder 只是一个简单操作,对数据应该不会有多大依赖性。 chuxf 发表于 2014-3-1 16:40
我想这个问题恐怕不是你的错,你的算例和代码都没有问题。
我在 intel 的论坛发现了去年的一个帖子提及 ds ...
DSS有错误提示,UMFPack错误提示是-8,pardiso直接跳出C的子程序free.c
void __cdecl _free_base (void * pBlock)
{
int retval = 0;
if (pBlock == NULL)
return;
RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
} retval = HeapFree(_crtheap, 0, pBlock);定在这一行 谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,
I've put your data into PARDISO interface and obtain following error:
*** Error in PARDISO(incorrect input matrix) error_num= 24
*** Input check: j=1410, ja(j)=72, ja(j+1)=67 are incompatible
The reason of this failure: in 72th row elements store in incorrect format - column of 1411th element is less than column of element with 1410 number in spite of they lie in one row!
Thanks,
Alex发现输入数据确实是乱序的~正在改
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,
哦,怪不得,superLU和MUMPS对数据的顺序没要求 本帖最后由 aliouying 于 2014-3-2 08:30 编辑
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,
哦,怪不得,superLU和MUMPS对数据的顺序没要求
只需要排序下即可,我到算法板块发下排序算法
排序后果然可以求解,结果一致
页:
[1]
2