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


13

在我的博士学位论文中,案例研究要求我在CHEMKIN-II中有Fortran子例程的间隔扩展(对此表示歉意;这是我能从Sandia国家实验室不再分发的软件包中找到的最好的)。CHEMKIN-II是用于燃烧化学的化学软件包。因为它是燃烧中使用的标准包装,所以我不能(或者更愿意不使用)。

为了获得所需的间隔扩展,我一直使用内部开发的称为DAEPACK的工具。我以前使用的旧二进制文件能够生成我在32位OS(版本对应于gcc 2.95的libstdc版本)上所需的CHEMKIN-II子例程的所需间隔扩展,但是几年前就淘汰了的使用,这是一个巨大的考验(因为我必须找到我使用的所有其他软件的32位版本)。该软件包的源代码也是专有的,但是由于它最初是由MIT开发的,而我是在MIT工作的,因此我能够(经过大量的努力)获得DAEPACK的源代码。使用我拥有的源代码,我能够编译与64位版本的Linux兼容的DAEPACK版本以及与gcc 4.xx相对应的libstdc版本。但是,我怀疑此源代码已经过时,编译成无法成功生成我需要的区间扩展代码才能完成论文的可执行文件。我已与开发人员联系,以寻求他的修复源代码方面的帮助,但是从以前与开发人员的联系中,我知道如果他愿意的话,修复源代码将花费一些时间。

这是个大问题:我有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中。我可以使用f2c,也可以根据需要使用CHEMKIN-II的基于Sandia的克隆TChem 将其转换为C。我以前的结果是使用CHEMKIN-II;我的新结果应该复制我的旧结果,并且我已经知道Cantera将不会根据案例研究和单元测试复制CHEMKIN-II的功能。此外,我之前的研究生对CHEMKIN-II源代码进行了一些不可思议的操作,以使区间运算特别有效。对于我来说,很难在其他任何软件包中复制它。

立即更改您的论文主题。摆脱那种愚蠢的区间算法,做一些有用的事情,理想情况下是使用可以运行的软件。;-D
杰德·布朗

6
利用您现有的结果,将它们塞入您的论文主题的解释中,撰写精美的文章,并为国防委员会购买大量的零食。
Matt Knepley 2012年

f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
死息2012年

1
间隔算术的基本概述可以在Wikipedia(包括间隔扩展的概念)上找到,也可以在本页上提到的参考文献中找到。泰勒模型,我能找到的最好的介绍是这里。自动微分通常用于泰勒模型的实现;我从未听说过或看到有人使用数值近似来代替。
Geoff Oxberry 2012年

2
@MishaBrukman:哦,我只是对所有这些都打了。
杰夫·奥克斯伯里

Answers:


2

假设问题在于DAEPACK可以在32位模式下工作,而不能在64位模式下工作,那么这里有一些方法可以解决此问题。

DAEPACK在64位OS上以32位模式进行编译

另一个问题中查看如何执行此操作。这可能是继续使用它的简便方法。

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

重新创建整个安全DAEPACK环境

  1. 创建一个虚拟机使用一个完整的32位环境中,例如,VirtualBox的,这样DAEPACK在它高兴的运行,无论从老的二进制文件,或在这种环境下重新编译。您可以获得所需的旧版本的开源OS和编译器,以获取该软件的有效版本。

  2. 从输出中获取输出DAEPACK并将其传输到环境适合于其他软件的主机或单独的虚拟机,然后继续工作。例如,这可以是较新的64位操作系统,然后在此处继续工作。

    使用VirtualBox中的共享文件夹功能可以使您轻松实现这一点。

征集他人以帮助解决 DAEPACK

我注意到您说您和软件作者都没有时间解决此问题,但是没有人说您无法争取任何人的帮助!考虑以下选项:

  • 雇用一些MIT CS的本科生帮助解决32位和64位问题。请注意,为了诱使他们继续工作,例如,您可能必须用金钱或比萨饼(和/或啤酒,如果他们处于法定饮酒年龄)进行补偿。或考虑询问您的顾问是否可以雇用一些兼职本科生来解决此问题(如果您自己的资金用完了,可能是资金问题)。或向您所在部门的研究程序员寻求帮助。

  • 游说一个开源发行版DAEPACK。看起来其许可状态尚不清楚,但请注意,麻省理工学院(MIT)具有同名的开源许可证,该许可证相当有名。在开放许可证下发布它可能有助于更多地关注该问题,并有助于修复32位和64位问题。

    请注意,根据您所在部门的不同,法律,行政等办公室可能要花六个月以上的时间,因此请考虑尽早开始,同时寻求其他选择。

祝好运!


花了一段时间写了这个答案之后,我才意识到您在2012年写了您的问题,截止日期为6个月,所以这次讨论颇具争议。对于那个很抱歉!我仍然很好奇您在这种情况下最终会做什么。
Misha Brukman 2014年

在攻读博士学位期间,我尝试了您提到的所有三种方法,但均未成功。IIRC的问题是它将生成错误代码。编译它(尽管费劲,因为我必须对它的一部分进行现代化)实际上是我最少的问题。DAEPACK是公司的关键技术,因此不太可能以开源形式发布。让其他人离开该公司和我的前顾问实验室之外也很难解决,而且我怀疑有进取心的MIT CS学生会希望继续从事这份毫无价值的工作。
2014年

@GeoffOxberry很遗憾听到这个消息,但是(不幸的是)这在所谓的“研究质量”软件中太普遍了。恭喜您坚持并完成学位!
Misha Brukman 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.