模型-视图-控制器有用的模式对构建科学仿真程序有用吗?

计算科学 模拟 3d
2021-12-06 18:09:14

我从事科学模拟工作,但我最喜欢的编程是创建图形用户界面和 2D 或 3D 输出,以可视化模拟的演变。我知道科学模拟中的大多数输入数据都在文本文件中,而不是在 GUI 中,而且通常统计图在科学上比 3D 电影更相关。但我仍然不能接受我必须放弃我对科学中的 GUI 和 3D 的尊重......

你认为我应该在我的程序中采用模型-视图-控制器范式吗?我可以使用多线程将高性能计算与可视化分开,这样可视化崩溃不会影响计算吗?这样我就可以从文本输入文件切换到 GUI,然后再回到我的心血来潮。你推荐哪个软件?

2个回答

这个答案是我个人的看法。我相信高性能数值求解器不是使用 MVC 模式的好地方。额外的层和特定的数据流将无助于获得更好的性能。MVC 和 MVVM (Model-View-ViewModel) 常用于 GUI 开发。如果您想开发性能不那么重要的前置/后置处理器,架构模式可以帮助您组织项目并使其更容易开发(尤其是如果您在团队中工作)。我相信数值软件的 GUI 应该始终与计算核心分开。不仅通过使用多线程,而且它应该位于一个单独的程序中。这种架构在 Abaqus 或 Ansys 等许多商业数值软件中很常见。如果 GUI 崩溃,它不会影响计算。求解器可以在没有图形界面的 HPC 机器上单独运行。此外,几乎可以使用任何提供合适的小部件集的语言来编写 GUI——Java、C# 或 C++ (QT)。这取决于目标平台和您的编程技能。您甚至可以使用一些通用的后/预处理器,如 GMSH、Paraview 或 GiD,并将其与您的求解器结合使用。高性能数值求解器几乎总是用一些低级语言编写,如 C、C++、Fortran,它们不支持 MVC/MVVM 模式,就像 Java 或 C# 那样。您甚至可以使用一些通用的后/预处理器,如 GMSH、Paraview 或 GiD,并将其与您的求解器结合使用。高性能数值求解器几乎总是用一些低级语言编写,如 C、C++、Fortran,它们不支持 MVC/MVVM 模式,就像 Java 或 C# 那样。您甚至可以使用一些通用的后/预处理器,如 GMSH、Paraview 或 GiD,并将其与您的求解器结合使用。高性能数值求解器几乎总是用一些低级语言编写,如 C、C++、Fortran,它们不支持 MVC/MVVM 模式,就像 Java 或 C# 那样。

在我的 PHD 论文中,我决定使用 C# 和 MVVM 模式编写自己的预处理器,并使用 C++ 分离数值求解器,该求解器使用预处理器生成的输入文件。这种架构更容易开发和维护。

虽然 MVC/MMVM 模式在适当的情况下很有用,但我会避免尝试将数字硬塞到由您选择的 GUI(或其他 UI)框架引导的模式中。除非您以某种方式进行多线程处理,否则 GUI 本身将随着模拟的进行直到完成。

您提到您希望随着时间的推移查看模拟的演变:为此,您可以使用数字代码中的同步回调,或者如果在单独的过程中实现,您可以监控解算器的标准输出(stdout),如果这提供了任何有用的“打勾”数据。与简单的批处理求解器过程相比,这可能涉及大量的开发工作。

卓越的视觉效果(GUI、3D 等)也不必与批处理解决方案过程相互排斥。我执行的一些模拟(耦合 FEM-Neural)向文本终端报告了相对复杂的进行中数据,并后处理了更详细的视觉输出。