有没有一种工具可以通过解析 Fortran(或 C)代码来生成 Fortran(或 C)函数的区间扩展?

计算科学 正则 C 自动分化 区间算术
2021-12-19 00:59:57

我的博士论文中的案例研究要求我在CHEMKIN-II中对 Fortran 子例程进行间隔扩展(为链接道歉;对于桑迪亚国家实验室不再分发的软件包,这是我能找到的最好的一个)。CHEMKIN-II 是用于燃烧化学的化学软件包;因为它是燃烧中使用的标准包装,所以我不能(或者更确切地说,真的不想)使用不同的包装。

为了获得所需的间隔扩展,我一直在使用内部开发的工具DAEPACK. 几年前,我曾经能够生成所需的 CHEMKIN-II 子例程的间隔扩展的旧二进制文件(具有对应于 gcc 2.95 的 libstdc 版本)在 32 位操作系统上,但后来已经退出日期,并且使用起来将是一个巨大的考验(因为我必须找到我使用的所有其他软件的 32 位版本)。这个包的源代码也是专有的,但由于它最初是在 MIT 开发的,而且我在 MIT 工作,所以我能够(经过大量努力)获得 DAEPACK 的源代码。使用我拥有的源代码,我能够编译与 64 位版本的 Linux 和对应于 gcc 4.xx 的 libstdc 版本兼容的 DAEPACK 版本但是,我怀疑这个源​​代码是旧的,编译成一个可执行文件,它没有成功生成我完成论文所需的间隔扩展代码。我已经联系了开发人员,试图让他帮助修复源代码,但是从之前与开发人员的联系中,我知道他需要时间来修复源代码,如果他真的这样做的话。

最大的问题是:我离毕业还有 6 个月的时间,因为我的资金已经用完了。我不能指望开发人员足够快地修复 DAEPACK 以让我成功完成我的博士论文,这就是你们进来的地方。

我需要一个执行以下操作的包:

  • 生成几乎任意 Fortran 77 代码的区间扩展、泰勒模型(使用区间算术)和导数;我认为 DAEPACK 唯一不解析的结构是DO循环和IF语句。由于我需要泰勒模型,因此代码还必须具有自动微分 (AD) 功能。
  • 通过 Fortran 77 代码的源到源转换生成这些区间扩展和 Taylor 模型(即,它像编译器一样解析源代码以生成计算区间扩展和 Taylor 模型的源代码)。

在紧要关头,我可以使用对 C 代码执行上述两件事的软件而不是 Fortran 77 代码,然后将所有内容通过f2c. 我真的不想这样做,因为我不知道是否通过所有内容是否f2c会起作用,但我非常绝望。

你们能帮助一个绝望的博士生吗?


为了预测一些可能的建议,考虑到时间限制,这里有一些对我不起作用的方法:

  • 更加努力地让 DAEPACK 发挥作用;相信我,我试过了。而且我经常打扰开发人员。
  • 使用面向对象(或类似对象)方法计算区间扩展或泰勒模型的工具。我没有时间用新类型重新编码 CHEMKIN-II(或任何其他类似的大型库);这个太大了。
  • 使用除 Fortran 77/90 或 C 以外的任何语言。CHEMKIN-II 代码使用 Fortran。我可以使用 将它转换为 C f2c,或者如果需要,使用基于 Sandia 的 CHEMKIN-II 克隆,称为 TChem。我的旧结果使用 CHEMKIN-II;我的新结果应该会复制我的旧结果,而且我已经知道 Cantera 不会复制 CHEMKIN-II 基于案例研究和单元测试所做的事情。此外,我之前的研究生对 CHEMKIN-II 源代码做了一些黑魔法,以使区间算术工作得特别好。我很难在任何其他包中复制它。
1个回答

假设问题是DAEPACK在 32 位模式而不是 64 位模式下工作,这里有一些解决这个问题的方法。

DAEPACK在 64 位操作系统上以 32 位模式编译

在另一个问题中查看如何做到这一点这可能是继续使用它的简单方法。

如果问题是生成的代码在 64 位模式下存在问题,请使用类似的 32 位标志或在 32 位环境中编译生成的代码(64 位操作系统可以在给定适当的库的情况下运行 32 位代码,但是反之亦然

重新创建一个完整的DAEPACK安全环境

  1. 使用例如VirtualBox在虚拟机中创建一个完整的 32 位环境DAEPACK,无论是从旧的二进制文件还是在此环境中重新编译,都可以在其中愉快地运行您可以获得开源操作系统和编译器的版本,只要您需要获得该软件的工作版本即可。

  2. 获取输出DAEPACK并将它们传输到主机或单独的虚拟机,其中环境适合其他软件并继续工作。例如,这可以是更新的 64 位操作系统,并继续在那里工作。

    使用 VirtualBox 中的共享文件夹功能应该会让您轻松做到这一点。

招募其他人帮助修复DAEPACK

我注意到您说您和软件作者都没有时间解决此问题,但没有人说您不能寻求其他人的帮助!考虑以下选项:

  • 聘请一些 MIT CS 本科生来帮助解决 32 位与 64 位的问题。请注意,为了吸引他们工作,您可能需要补偿他们,例如用金钱或披萨(和/或啤酒,如果他们达到法定饮酒年龄)。或者考虑询问您的顾问是否可以聘请一些兼职本科生来帮助解决这个问题(如果您自己的资金用完,可能是资金问题)。或者向你所在部门的研究程序员寻求帮助。

  • 游说DAEPACK. 看起来它的许可状态尚不清楚,但请注意,麻省理工学院有一个相当知名的同名开源许可;在开放许可下发布它可能有助于更多地关注问题并帮助解决 32 位与 64 位问题。

    请注意,根据您的部门,法律、行政等办公室可能需要比您留给博士学位的 6 个月更长的时间,因此请考虑尽早开始,同时寻求其他替代方案。

祝你好运!