Fortran Coder

标题: Intel Visual Fortran MKL DSS 求解大型稀疏矩阵方程出错 [打印本页]

作者: duty    时间: 2014-3-1 15:12
标题: 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。代码和输入数据文件见附件。







Code_Data.zip

4.84 KB, 下载次数: 19


作者: aliouying    时间: 2014-3-1 16:21
我想既然是MKL里面的例子,应该不会有错,只能是矩阵的问题或者是DSS不能求解这个矩阵

MKL里面有pardiso,也是求解系数矩阵的,试试这个函数
作者: aliouying    时间: 2014-3-1 16:38
拿你的矩阵测试了下,只有SuperLU和MUMPS能求,具体得到的结果我不知道是否正确,但两个求解器的结果一致。
UMFPack和Pardiso都在reorder的时候出错,不知什么原因,求大神解释

我的系统是win32,IVF2013+VS2012,可能是库的编译问题
但pardiso是mkl下的,应该能求解的,但出错了

我有点纳闷的是,你的values的第一个元素为什么会是0?
作者: 楚香饭    时间: 2014-3-1 16:40
我想这个问题恐怕不是你的错,你的算例和代码都没有问题。

我在 intel 的论坛发现了去年的一个帖子提及 dss_reorder 出错,后来发布了新版本解决这一问题。但是是 C 接口的。

我不确定是不是 Fotran 的接口没有改。

MKL 是一个商业化的函数库,就算是矩阵问题,也会有良性的错误提示或返回值。而且 reorder 只是一个简单操作,对数据应该不会有多大依赖性。
作者: aliouying    时间: 2014-3-1 16:43
chuxf 发表于 2014-3-1 16:40
我想这个问题恐怕不是你的错,你的算例和代码都没有问题。

我在 intel 的论坛发现了去年的一个帖子提及 ds ...

DSS有错误提示,UMFPack错误提示是-8,pardiso直接跳出C的子程序free.c

[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());
        }
}

作者: aliouying    时间: 2014-3-1 16:44
retval = HeapFree(_crtheap, 0, pBlock);  定在这一行
作者: duty    时间: 2014-3-2 02:16
谢谢斑竹大神,我在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
发现输入数据确实是乱序的~正在改

作者: aliouying    时间: 2014-3-2 08:29
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,

哦,怪不得,superLU和MUMPS对数据的顺序没要求
作者: aliouying    时间: 2014-3-2 08:29
本帖最后由 aliouying 于 2014-3-2 08:30 编辑
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,

哦,怪不得,superLU和MUMPS对数据的顺序没要求

只需要排序下即可,我到算法板块发下排序算法

作者: aliouying    时间: 2014-3-2 08:39
排序后果然可以求解,结果一致
作者: duty    时间: 2014-3-2 15:36
aliouying 发表于 2014-3-2 08:39
排序后果然可以求解,结果一致

想问一下superLU和MUMPS有源码吗?
作者: aliouying    时间: 2014-3-2 18:14
duty 发表于 2014-3-2 15:36
想问一下superLU和MUMPS有源码吗?

网上开源可以下载




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2