Fortran Coder

查看: 20805|回复: 11
打印 上一主题 下一主题

[数学库] Intel Visual Fortran MKL DSS 求解大型稀疏矩阵方程出错

[复制链接]

21

帖子

6

主题

0

精华

入门

F 币
83 元
贡献
50 点
跳转到指定楼层
楼主
发表于 2014-3-1 15:12:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

沙发
发表于 2014-3-1 16:21:41 | 只看该作者
我想既然是MKL里面的例子,应该不会有错,只能是矩阵的问题或者是DSS不能求解这个矩阵

MKL里面有pardiso,也是求解系数矩阵的,试试这个函数

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

板凳
发表于 2014-3-1 16:38:41 | 只看该作者
拿你的矩阵测试了下,只有SuperLU和MUMPS能求,具体得到的结果我不知道是否正确,但两个求解器的结果一致。
UMFPack和Pardiso都在reorder的时候出错,不知什么原因,求大神解释

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

我有点纳闷的是,你的values的第一个元素为什么会是0?

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 2014-3-1 16:40:18 | 只看该作者
我想这个问题恐怕不是你的错,你的算例和代码都没有问题。

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

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

MKL 是一个商业化的函数库,就算是矩阵问题,也会有良性的错误提示或返回值。而且 reorder 只是一个简单操作,对数据应该不会有多大依赖性。

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

5#
发表于 2014-3-1 16:43:42 | 只看该作者
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());
        }
}

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

6#
发表于 2014-3-1 16:44:11 | 只看该作者
retval = HeapFree(_crtheap, 0, pBlock);  定在这一行

21

帖子

6

主题

0

精华

入门

F 币
83 元
贡献
50 点
7#
 楼主| 发表于 2014-3-2 02:16:55 | 只看该作者
谢谢斑竹大神,我在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
发现输入数据确实是乱序的~正在改

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

8#
发表于 2014-3-2 08:29:41 | 只看该作者
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,

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

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

9#
发表于 2014-3-2 08:29:41 | 只看该作者
本帖最后由 aliouying 于 2014-3-2 08:30 编辑
duty 发表于 2014-3-2 02:16
谢谢斑竹大神,我在Intel的论坛发帖问了,下面是回复
HI,

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

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

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

10#
发表于 2014-3-2 08:39:08 | 只看该作者
排序后果然可以求解,结果一致
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-24 17:48

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表