问题标签 [metis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1056 浏览

c - 将 C 代码与 .C 连接会导致 R 崩溃

我需要迭代地获取给定图的最小分割分区,直到子图的 odes 数量低于某个给定的阈值min_node。这将用作 CHAMELEON 聚类算法的预处理步骤。为此,我将METIS库与 R 一起使用。我为METIS_PartGraphRecursive ()METIS 库中的函数制作了一个简单的包装器,我用它来通过.C接口从 R 代码调用。调用包装器函数没问题,并进行分区并返回我处理的结果,并通过消除两个分区之间的边缘来检索子图。然后我通过其中一个子图来进行进一步的分区。此调用使 R 崩溃。崩溃跟踪显示在崩溃报告中下面的部分。(更新)Valgrind 的输出如下所示(正如 Martin Morgan 评论的那样)。

似乎崩溃的原因是 METIS 库中的一些代码。

我正在发布我正在使用的 METIS 包装器,以及我如何称呼这个包装器。

崩溃后,fedora 显示“检测到 R-core-2.15.0-1.fc16 包中的问题”的通知。R 被操作系统使用 SIGABRT 或 SIGSEGV 杀死,并且错误报告工具消息告诉以下内容:

我的系统:

谁能帮我解决这个问题?

测试数据集

样品运行

从上述点生成的 metis 格式的图形已分区一次,在此特定示例中可以正常工作。但是,如果我采用其中一个分区组件并进一步对其进行重新分区,那么程序就会崩溃。同样,对于具有 600 个点的更大数据集,第一个分区崩溃。

METIS 包装

R中的.C代码

崩溃报告

Valgrind 转储

0 投票
3 回答
1042 浏览

c - 从 Fortran 运行时出现 METIS 段错误

我正在尝试使用METIS库进行网格划分,作为我为有限元计算编写的 Fortran 程序的一部分。METIS 是用 C 语言编写的,但它应该可以在 Fortran 90 上正常工作。但我不断遇到段错误。

一个潜在的问题是我给出了一些空指针的参数。其他一些人在从 fortran 调用 C 函数以识别空指针对象时遇到了麻烦。这是在这里解决的,我认为这不是我遇到的问题。

我认为问题在于让 METIS 更改起始数组索引;在 C 中它是 0,在 Fortran 中它是 1。有一个数组传递给每个函数,如果你想要 Fortran 约定options,它应该有一个METIS_OPTION_NUMBERING你可以更改的字段。1不这样做会导致 C 程序尝试访问索引 0,从而给您 seg 错误。

edunlop1在这里的帖子建议我只是创建一个数组options,并且与 METIS 达成的一些约定确定该数组的哪个元素应该设置为 1,以便对所有内容重新编号。但这取决于您使用的例程,数组长度也会发生变化。

无论如何,这是我的代码:

METIS 中用于更改编号的相关代码位于文件 libmetis/meshpart.c 中:

有什么想法吗?如果有帮助,我可以发布 Valgrind 输出。

0 投票
2 回答
2415 浏览

fortran - 在 fortran 程序中调用 METIS API(用 C 语言编写)

两个多星期以来,我一直在努力从我的 fortran 代码中调用一个用 C 编写的METIS库。而且,不幸的是,没有你的帮助,这似乎不是一个快乐的结局。我发现了一些关于直接调用使用接口的帖子。我更喜欢后者,因为我可以监视变量以进行调试。我附上了三个代码。

1.我想使用的c函数
2.fortran接口模块
3.fortran程序

(1)c函数

我删除了 c 函数体。没有必要了解我的问题

这里,idx_t是整数,real_t是单精度或双精度。从neoptions是输入,最后三个参数是输出。并且vwgtvsizetpwgtsoptions可以接收 null 作为默认设置的输入 我编写了使用这样的 c 函数的接口模块

(2) Fortran接口模块

固定的!

  1. 在use 常量下插入use iso_c_bind
  2. nenn和其他变量使用integer(c_int)而不是integer 。
  3. 删除未使用的模块常量

.

这是我调用该函数的程序代码

(3) Fortran程序

固定的!

  1. npart的分配大小是固定的。不是ne而是nn
  2. 添加 opts(7)=1 以获得 epart、npart 的 Fortran 样式数组(直到现在才生效)

.

但问题是我收到如下错误消息,尽管我为 tpwgt 设置了 null。

输入错误:约束 0 的 tpwgts 的 0.000000 总和不正确。

这条消息在下面的代码中处理。

无论如何,为了看看如果我为 tpwgts 放置一个数组而不是 null 会得到什么,tpwgts(:) = 1.0/nparts,这使得 tpwgts 的总和等于 1.0。但我得到了与1.75相同的消息。

这些是我的问题
1. 我是否使用 null() 正确传递参数?
2. 我必须将所有参数的指针传递给 c 函数吗?那怎么办?
3. 将整数放入 opts(0:39) 是否足够使用?例如,在没有“接口模块”的帖子中,使用了像 options(3)=1 这样的简单代码。但在 c 代码中,options 有 16 个命名变量,如 options[METIS_OPTION_NUMBERING]、options[METIS_OPTION_UFACTOR]。我认为设置选项是必要的,但我不知道。4. 有没有 METIS fortran 的例子?

任何形式的提示/建议都会对我有很大帮助。谢谢你。

结论

我遇到的问题是c 函数无法从 fortran 代码中识别空指针。

接口模块中有一些变量的错误声明(请参阅“已修复”和评论)

看起来代码工作正常。但是fortran 样式输出的option(7) = 1不起作用,现在我正在研究它。

0 投票
0 回答
344 浏览

c - 传递数组中的访问冲突错误

在为我之前提出的问题找到答案之前,我为非常小的网格(只有两个三角形)编写了非常简单的代码,如下所示在 fortran 中调用 C 函数。为了代码的简单。这里既没有使用接口模块,也没有使用 iso_c_binding(as possible)。和这篇文章很相似,还有一个错误。

由于eind ,它给出了访问冲突错误。如果传递c_null_ptr而不是eind,它无论如何都会运行。数组eind的大小和元素个数是一致的。如何修复?=>已解决。谢谢!

我遇到的问题是调用 METIS_PartMeshNodal 时出现系统税错误,第二个参数是 ne,与第一个参数 ne 相同。应该是nn
解决方案是将第二个参数替换为nn。上面的代码可以编译执行。

注意:由于 METIS 的方案,太小的网格可能没有合理的解决方案。
请参考另一篇文章以使用接口模块。

0 投票
1 回答
2306 浏览

python - 为 METIS 安装 Python 包装器:找不到 METIS_DLL 共享库

我打算使用 Metis 使用 Python 绘制一些网络和图形。我从这里下载了 Metis 。为了安装 Python 包装器,我按照此处给出的说明进行操作,但是当我运行 easy_install 命令时,如下所示:

我收到此错误:

从上面的第二个链接中,我了解到我必须在 METIS_DLL 环境变量中指定一些“METIS 共享库”文件的完整路径。但我不知道该文件被称为什么以及它的位置或我应该如何在环境变量中指定路径。

根据我对 Google 的研究,我发现该文件可能被称为“libmetis.so”,但我没有任何该名称的文件。有人可以给我一个线索吗?

任何帮助将不胜感激,谢谢。

0 投票
2 回答
699 浏览

fortran - Metis API 通过 Fortran

我正在尝试通过 Fortran 使用 METIS 对网格进行分区,我在 X64 Windows 7 系统上使用 Visual Studio 10.0 X64 构建了 lib 文件,我的程序如下:

我修改了所有输入数组并且它们是正确的(我已经使用 EXE 成功地分割了这个网格),但是,当我使用 API 时,我收到以下错误:

当前使用的内存:zu 字节 使用的最大内存:zu 字节 *** CreateGraphDual 的内存分配失败:nind。请求大小:zu 字节

我不知道出了什么问题或如何调试它

0 投票
2 回答
2273 浏览

graph - Neo4j 图形数据库的图形分区算法

我知道有一些著名的图形分区算法工具,例如由 karypis Lab 实现的 METIS ( http://glaros.dtc.umn.edu/gkhome/metis/metis/overview )

但我想知道有什么方法可以对存储在 Neo4j 中的图进行分区吗?或者我必须转储 Neo4j 的数据并手动转换节点和边缘格式以适应 METIS 输入格式?

0 投票
1 回答
1664 浏览

c - 在 Fortran 代码中使用 Metis 库...基础知识

如果这有点多余,我提前道歉,我已经查看了其他提到使用 Metis 和 Fortran 代码的帖子。另外我是个菜鸟,所以请用小词,慢慢说!:p

我正在尝试使用 Metis 5.1.0 在我编写的 fortran 代码中对网格进行分区。我想知道通过调用 c 库来编译 fortran 代码的基础知识?我怎么做?这是在编译时完成的还是我需要在代码中包含某种包含语句?目前,当我尝试编译时,我有以下相关片段:

程序的顶部(我什至需要包含或使用语句吗?)


makefile(我确信其中有错误)


调用metis分区相关的子程序(使用直接调用)


当我尝试编译时出现以下错误


我可以看到我的 make 文件是错误的,但是我想知道为什么当我从 metis 引用我需要的 c 库时,为什么当我的代码和所有内容与metis 库 meshpart.c。正确安装的metis是否没有正确链接或引用它的库和必要的组件?

感谢任何人都可以提供的任何帮助!再次感谢您的耐心,我知道这是一个非常基本的问题。

0 投票
0 回答
667 浏览

c - 使用 Fortran 和 C 调用 Metis API

我编写了以下代码来使用 Fortran 和 C 调用 Metis,但仍然出现分段错误。代码的目标是对输入文件进行分区chanelElements

主程序是

我编译使用并得到错误:

0 投票
0 回答
278 浏览

c - 使用 Fortran 和 C 调用 Metis

我尝试运行以下代码但出现错误。错误是 *CreateGraphNodal 的内存分配失败:nptr。

运行代码时,我收到此错误: