我正在开发一个有限的元系统。像往常一样,该模拟包括设置的网节点,每个有一定的属性(浮点),如若干材料的性质,坐标或物理量,发展在时间。

您可以采用两种极端办法:

  • 酒店-明智的:维持一个单列于每一财产:

    double* x, *y, *z, *e_field, *b_field, *conductivity;

  • 进入-明智的:维持一个单一的阵列,每个阵列是结构

    struct { double x, y, z, e_field, b_field, conductivity; } *meshnodedata;

这些之间,一个可能组合,类似于应用第二种方法仅用于坐标x、y、z和使用第一种方法,用于剩余性质。更多的属性模拟维持对每一个网节点的可能性的混合。

一方面,我已经得到了古典的问题,这些办法(以及他们的混合)是最好的科学计算关于业绩的程序,并可维护性的代码。另一方面,我想知道如何实施代码这样一种方式,移徙之间不同的方法变得容易。此外,它甚至可能是一个解决方案之间的迁移不同记忆的布局不同的程序部分。

来点:

  • 什么是您的经验圣灵降临这些不同的办法?
  • 如何大大有这些差异?
  • 你有没有获得的经验,在迁移这两者之间的布局?
有帮助吗?

解决方案

你的问题实际上归结为一个问题是如何设计灵活和快速的有限元的软件,这是一个区域的活动的研究。我曾在这种软件,并且我认为你的问题的答案真正取决于什么样的特点,你会喜欢的支持。例如,你需要适应电网的改进和粗?你解决系统的政策制订和评价处?应代码上运行的一个集群?如何许多的未知数将你有吗?不知道你的目标,我尝试一些一般性ponts无论如何。

  1. 有苦苦FE框架和格管理人员那里--使他们中的一个!

  2. 格管理人员复杂得多,许多人认为。只要这只是四面体在3D在一个单一的计算机,它仍然可能是可管理.一个网管理与混合单元类型的3D与当地的改进和平行负载平衡是一项巨大的任务。只有开发自己的网管理如果你知道你想要什么,以提高那些易于获得。

  3. 存储器的布局:现在我们得到的实际问题:)
    分立的栅格数据和问题的数据。这会让你的代码的更多维护。格管理可以用于不同种类的问题,每个问题都有其自己的一套数据连接到每一个元素。

  4. 如果你店里的东西喜欢的导电网格内或之外应该没多大关系,尽可能表现有关。我会单独设计的原因,没有为绩效的原因。

  5. 存储你的未知数(可能 e_fieldb_field 在你的实例)在一个连续区的存储器。这将大大提高的性能的线性规划求解。一个迭代的线性解通常是有限的通过存储器的带宽大的矩阵。

  6. 该结构内的矢量的未知数可能进行分组或分块(基本上是两个接近你的描述自己的),这两个办法中选择对于编号的未知数取决于许多因素,包括种类型的PDE你解决的那种线性解你的用途。有很多科学出版物对这个问题单。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top