产品评测:Diffpack

作者:Jim Moore
Diffpack
  • 制造商:Numerical Objects AS

  • 电子邮件:sales@nobjects.com

  • 网址: http://www.nobjects.com/

  • 价格:根据许可证而异(见下文)

  • 评测人:Jim Moore

Product Review: Diffpack

Diffpack 是一个面向对象的工具包,用于创建数值分析应用程序。它提供了高级构建模块,可以将它们组合在一起,快速创建用于求解偏微分方程的高质量应用程序。该软件包附带一本书,计算偏微分方程 (CPDE),作者是 Hans Petter Langtangen(Springer-Verlag 出版社)。

我必须承认,这本书给我留下了深刻的印象,因为它是由作者用 TeX 排版的,任何 TeX 用户都会告诉你,使用 TeX 是智慧的象征。这本书制作精良,排版精美。它的写作风格与 William Schroeder 等人编写的 可视化工具包 (Prentice Hall Computer Books 出版社) 非常相似,书中详细描述了构建数值算法以求解偏微分方程 (PDE) 的方法和方法论,所有示例都是 Diffpack 软件的演示。

CPDE 以对面向对象编程的强烈且有力的支持开始。然后,它继续描述复杂度不断增加的 PDE 以及可以处理它们的数值方法。本书解释了数学的难度,以及将 PDE “线性化” 为代数方程组并以各种方式求解时所涉及的复杂性。还涵盖了性能优化技术。对于每个复杂程度级别,都会使用 Diffpack 软件解决相关的示例问题,以演示如何解决该问题。CPDE 更侧重于有限元方法,而不是有限差分方法,这可能是由于作者的经验,但对两者都给予了充分的介绍。

主要章节主题准确地描述了本书的内容

  • 1. 入门

  • 2. 有限元离散化简介

  • 3. 有限元求解器的编程

  • 4. 非线性问题

  • 5. 固体力学应用

  • 6. 流体力学应用

  • 7. 耦合问题

  • 附录 A. 数学主题

  • 附录 B. Diffpack 主题

  • 附录 C. 稀疏线性系统的迭代方法

  • 附录 D. 求解线性系统的软件工具

共有 127 个练习,以帮助数值方法专业的学生加深对该主题的理解。演示广泛使用了 Linux 系统上常用的工具,例如 Gnuplot、Plotmtv、Matlab、Vtk 和 Xmgr。科学 Linux 用户在阅读本文时会感到非常“宾至如归”。我对技术书籍的通常抱怨是,它们要么在示例上走得太远,而没有提供足够的背景知识,要么恰恰相反,在理论上走得太远,而让读者无从下手。在我看来,这本书很好地平衡了这两者。我全心全意地推荐它作为该主题的通用教材。如果你计划使用 Diffpack,那么这本书是必读的。

平台

Diffpack 可用于所有主要的 UNIX 版本和 Win32 平台。我仅在 Linux 上测试了该软件。有四种类型的许可证:商业开发者、非营利开发者、大学开发者和大学课堂。它们的初始价格分别为 9995 美元、3150 美元、995 美元和 1995 美元。课堂许可证允许五个并发用户。年度服务合同的费用约为每个许可证的 13.5%,并且附加许可证的费用低于初始许可证。多许可证、多平台支持也需要额外付费。如需了解更多价格信息,请直接联系 Numerical Objects AS。

虽然我没有测试过,但有一个名为 Adaptivity Toolbox 的插件可用,它使任何应用程序都能够实现自适应网格技术。它的额外价格从 995 美元到 3150 美元不等,具体取决于许可证类型。对于某些应用程序来说,此工具至关重要,应直接作为购买价格的一部分添加。如果你的问题涉及一个或多个数量级的尺度变化,你可能需要这个工具。

安装

我从演示 CD-ROM 在我的 Red Hat 6.0 双 Pentium-II 系统上安装了该软件,该 CD-ROM 可以直接从 Numerical Objects 网站 http://www.nobjects.com/ 订购。说明完整,安装过程非常简单,只需运行一个脚本,设置两个环境变量,并在 Makefile 中做一个字符的更改以反映我系统上的编译器名称。但是,如果你碰巧拥有比 1.0.3 更新版本的 egcs,并且不再有 1.0.3 版本,我只能对你说两个字——算了吧。Diffpack 必须 使用 egcs 1.0.3,如果你有更新的版本,则无法用它编译应用程序。最终,我在一台较旧的计算机上 NFS 挂载了 diffpack 发行版(我还没有来得及升级),以便我可以编译示例。这不是 Diffpack 的错,但仍然是一个致命的问题。

该 CD 包含 50 多个演示应用程序,这些应用程序与本书直接相关。CD-ROM 具有结构非常良好的 HTML 文档,其中解释了每个演示,并通过链接从 CD 中提取它们。每个示例的结构都完全相同,包含源代码、Makefile 和 README,其中解释了如何构建和运行示例。所有示例都有一个 “Verify” 目录,其中包含用于验证模拟的输入文件。这些示例通常在设计时考虑到某种渐进性,引导用户了解 Diffpack 的各种功能以及随附的辅助应用程序。某些应用程序需要许可版本的代码才能运行,但 CD 为其中一些应用程序提供了预构建的可执行文件。你还需要 Perl-Tk 才能运行 diffpack 应用程序的任何图形界面。我的 Perl-Tk 版本不够新,所以我没有这个荣幸。

在完成安装和应用程序编译过程后,很明显 Diffpack 设计得非常出色。在使安装过程在任何 受支持的 平台上都能良好运行方面,都经过了深思熟虑。该软件安装简单,但仍然让用户完全控制安装的完成方式。想要更改(受支持的)编译器?没问题。想要使用 VTK 进行可视化?没问题。要实现这些功能需要稍微阅读一下文档,但这通常就像更改环境变量或为 make 设置选项参数一样简单。

优点
  • 优秀的书籍

  • 强大的软件

  • 编写良好

  • 文档完善

缺点
  • 对库和 egcs 版本非常挑剔

  • 学习曲线陡峭

使用

Diffpack 就像从远处观看的分形图案:看起来简单,而且确实简单,但你越靠近观察,就会看到越多的东西。再次强调,除非你运行的是 Red Hat 5.2 或类似时间戳的 Linux 发行版,否则你的努力很可能会失败。应用程序可能会编译,但会发生核心转储,因为你有一个较旧的 f2c 库,例如。虽然我的努力失败了,但 Numerical Objects 向我报告说,Red Hat 6.0 发行版的用户已成功运行 Diffpack,因此如果你已经进行了更改,请不要灰心。这只会涉及更多的工作。一旦你有了正确的安装基础——小心!

我编译并运行了来自每个示例目录(fem、fdm、linalg 和 app)的示例。这些示例涵盖了从 “Hello World” 到波动方程再到耦合热量和动量传递的所有内容。第一个示例 Heat2,来自 fem 系列,让我感到非常兴奋。这是一个简单的二维瞬态傅里叶热传导问题。我编译了应用程序 (make MODE=opt),运行了它 (./test4.sh),在一个输出文件上运行了 LaTeX,并看到了完整的模拟报告:输入条件、调用的例程、解算历史和图形结果。该报告也以文本和 HTML 格式生成。输入文件大约 20 行长,并设置了网格(直线网格)、边界条件和运行控制。管理该应用程序的 shell 脚本包含两行。应用程序代码只有 350 行 C++ 代码,其中大部分用于管理内置于应用程序中的文本菜单系统。这种类型的精简应用程序可能只需要大约 30 行代码。

真正的优势在你想要更改某些内容时显现出来,例如解算器。更改一行代码,重新编译,就完成了。这个软件包有效地消除了构建数值解算器的繁琐过程,并使数值科学家能够专注于手头的问题:获得解决方案或证明不存在解决方案。

需要花费一些时间阅读文档以了解如何构建应用程序,但一旦完成,我怀疑在这个软件包在数值建模领域几乎无所不能。该软件包遵循 UNIX 范例,即制作许多可以组合起来以创建你想要的结果的小实用程序。例如,结果可以以多种格式呈现,这归功于诸如 simres2gnuplot 和其他几个 simres2* 应用程序之类的辅助应用程序。自由度和可扩展性似乎占据主导地位。

当然,自由也伴随着责任和学习曲线。Diffpack 提供了 C++ 类,可用于构建应用程序。这些类非常高级,因此你可以调用诸如 “GridFE” 或 “ConjGradNonLin” 之类的东西来分别处理有限元网格或共轭梯度解算器。示例程序对于想要使用 Diffpack 构建应用程序的开发人员来说是非常有益的帮助。我会将这种体验比作学习使用 VTK。但是,由于我是一名数值建模人员,并且不精通 C++ 方面的知识,因此我无法报告构建应用程序的难度。我可以报告的是,预构建的应用程序相对较短,易于阅读和理解。借助本书的帮助,如果你已经理解数值方法,那么应该不难变得熟练。由于该软件包是使用对象模型构建的,因此可以通过子类对高级类进行精细控制。

与大多数软件一样,在你投入大量精力之前,你不会意识到它的缺点。我不知道是否有可能在模拟期间对网格拓扑进行精细控制,或者例如根据节点位置改变收敛标准。大多数数值模拟软件包都调用启发式“技巧”来解决难题。diffpack 的实现似乎非常纯粹,并且可能很难摆脱“艺术”实践者熟悉的某些技巧。另一方面,由于它是纯粹的,它可能是解决工程师多年来一直在作弊的许多问题的第一个机会。界面跟踪浮现在脑海中。

Diffpack 似乎是一个编写良好、文档完善的工具,它完全实现了其自身宣传的目标:“弥合差距”。也许“填补”是一个更合适的术语,因为这东西和以前一样难,而且理解物理现象和找到可靠的计算解决方案之间的“差距”很大。这个工具使差距更容易跨越。

Product Review: Diffpack
Jim Moore 和他的妻子 Kim 同时努力将两个小顽童女儿转变为受人尊敬和富有成效的人,并使自己也变得富有成效和受人尊敬。他们开始相信这两个目标是互斥的。Jim 正在为他在俄亥俄州哥伦布市的初创公司 URS Technologies, LLC 开发分布式、基于对象的数值软件。他拥有 UT Austin 的 BSME 学位和俄亥俄州立大学的冶金工程博士学位。可以通过 jmoore@qn.net 与他联系。
加载 Disqus 评论