简介
我想就一个新的编程项目征求很多建议,我将自己开始。我将非常精确地说明我想要完成什么,以及我的基本要求是什么。因此,这将是一个长期的问题。请容忍我。在
我将把问题分成五个部分:
1。现实世界问题
摩天大楼和大型桥梁承受着动态风荷载。这意味着,如果设计不当,它们可能会因风振而倒塌(这实际上发生在1940年:http://www.youtube.com/watch?v=3mclp9QmCGs)。为了正确设计这种结构,需要高效的数字运算软件进行分析和仿真。在
2。模拟问题
有许多软件可以模拟流体流动或结构力学。其中许多已经开发了30多年,是成熟的成熟技术。因此,编写一个能够从头开始同时模拟流体流动和结构力学的多物理程序是不明智的。首先,你需要多年的开发才能成熟,而进入一个依赖特定软件超过30年的世界是非常困难的。但更重要的是…当你可以重用时,为什么要重新创建?我不追求单一的方法,而是喜欢分区的方法,这样可以重用现有的仿真软件。在
在分区方法中,我将使用软件X来模拟流,我将使用软件Y来模拟结构。然后我将编写我自己的耦合算法,在X和Y之间建立通信,并用它们来模拟多物理问题(例如摩天大楼或桥梁的风振)。我之所以使用X和Y而不是实际的软件名是因为X和Y应该是黑盒。我的耦合算法决不依赖于X和Y的实现。算法只依赖于X和Y的输出。这样,最终用户可以选择哪个X或Y对他们可用,或者哪个X或Y能够做最终用户想要实现的事情。在
因为我想使用黑盒分区的方法,软件X对Y一无所知,反之亦然。但是我如何在不知道周围空气流动的情况下模拟桥梁的变形,如何知道周围的空气流动是以何种方式受到结构的扰动而不知道它的变形呢?答案很简单:从猜测开始,使用迭代方法收敛到正确的解。然而,这种方法在计算上非常昂贵。为了降低计算成本,可以使用非常有效的技术以一种巧妙的方式编写耦合算法,这里不再讨论。我想说的是,一些沉重的线性代数数字运算是必要的。在
3。要求和偏好
我需要做的是:
我希望我的软件是:
我要用的是:
4。附加信息
事实:
商业模式:
5。建议请求列表
我想通过编写许多单独执行一个微小任务的函数来完成C++中的所有数字压缩。程序逻辑包含在一个CPython程序包中,它执行整个模拟,同时依赖C++函数来执行数字压缩。将C++和CPython算法扩展到用Cpththon编写的脚本(使用NoMPY、SciPy、Simuly和Matplotlib)生成和可视化原始数字数据的结果。我想能够做并行计算,我需要与几个第三方的开源和专有软件通信。在为了完成所有这些,我需要一大堆现有的库/包/技术等等。对于所有相关的问题,我知道我可以使用什么,但是我不知道我应该使用什么。最好的解决办法是一如既往地尝试一切,看看什么最有效。但是,如果任何有经验的用户可以排除一些不太可能的候选人,我很乐意收到他或她的建议,建议,赞成/反对的名单:
注:我总结了以上的一些选项,但这些只是示范性的,而不是限制。我对所有事物都开放,只要它是用C、C++、FORTRAN或Python编写的。同时,我也不期望在以上五个类别中都能从一个人那里得到答案。让社区的集体知识来解决这个问题。在
我感谢所有的贡献者,并祝你们在自己的努力中一切顺利。在
图形界面开发库(例如Qt、GTK、wxWidgets等)
如果您的“主操作系统是一个基于KDE的Linux发行版”,那么QT将轻而易举地赢得这一发行版。
背后的逻辑这个:-
NB:还可以考虑在MVC(model view controller)的C&V部分使用最新的web技术。
HTML5+CSS3+JS可以通过桌面应用程序上的web视图小部件运行。以上3个guilib都使用这个控件(对于wx,它是wx2.9.3及更高版本)。
网络技术技术:在
CPython 2.7.x或CPython 3.x
-CPython可能不太适合您的项目需求(我认为),主要是因为互斥体是全局解释器锁(GIL)的瓶颈。
也许PyPy对于您的项目来说是一个更好的python实现?
顺便问一下,你有没有建议:-Javascript在V8和Python上(pypyy,CPython等)?Javascript run by V8 can interact with Native Code (c++)有点像python
我还遇到了这个interesting blog(V8上的JS vs Py)。在
可能,gmp。您可以在此处找到更多详细信息:http://gmplib.org/
你提到了并行性,但没有提到如何使这个项目并行。这比简单地选择几个库要复杂得多。在向前迈进之前,需要考虑几个主要因素。在
您简要地提到了预期的平台,但是您还必须考虑模拟是在单个计算机/节点上运行还是在多个计算机/节点上运行。考虑到您正在对建筑进行迭代模拟,您可能需要比任何一台计算机所能提供的计算能力多得多的计算能力。这意味着,除非您希望使用混合的多进程、多线程方法,否则只能使用并行的多进程模型。OpenCL和MPI是实现的每个选项。(注意:MPICH和OpenMPI都只是MPI的实现,您的代码应该与这些无关)使用MPI传递消息是一个很好的并行性通用模型,但是对于那些不习惯于使用并行代码的人来说,这可能会非常困难。我个人的经验是使用MPI和一些混合编程,所以对于您选择的并行模型,我不能说太多。在
并行模型问题带来的一个问题是它直接影响到仿真软件。我不完全确定你计划如何将你的算法与模拟分开。如果您计划让您的代码分叉单独的进程来运行模拟,您将面临跨平台支持的问题,因为您可能无法以这种方式运行任意模拟。如果您打算在软件中运行仿真,则并行模型必须始终保持一致。尽管这会限制黑盒策略,但它可能会使整个过程更加可行。在
关于适用的库,已经有很多人说过了。我没有更多的话要说那些还没有被提及的特定库。请记住,在运行模拟时,许多相同的问题都必须通过这些解决。在
TLDR:不应该检查并行性。在对库做出决策之前,您需要知道将使用哪个并行模型。在
相关问题 更多 >
编程相关推荐