我的博士论文中的案例研究要求我在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 源代码做了一些黑魔法,以使区间算术工作得特别好。我很难在任何其他包中复制它。