我想使用平滑粒子流体动力学来模拟大片水域的潮汐特征。对于由不可压缩流体组成的系统,家用计算机可以解决什么一般规模的问题?也就是说,我可以使用平滑粒子流体动力学准确地表示有多大的水体?
使用平滑粒子流体动力学可以在 PC 上模拟什么规模问题?
所有模型都错了,但有些模型有用 - George EP Box
让我们建立一个重要的事实:模拟模型不是现实的精确复制品。我们使用模型来理解实际发生的真实物理的一小部分。没有任何模型,无论方程有多好或计算机有多强大,都不能准确地模拟现实。
模型可用于理解某些物理,无论是在原子尺度(从头算模型)、介观尺度(分子动力学或晶格 Bolzmann 模型)还是宏观尺度(纳维斯托克斯方程)。根据您选择的比例(以及其他因素),您可以做出某些假设来模拟一杯水或一个湖(甚至是海洋)。
“规模”一词(正如 OP 使用的那样)不会直接转化为计算负载。正如其他人已经指出的那样,计算负载取决于离散化后得到的自由度的总数。任何“尺度”都可以在台式计算机上模拟,前提是产生的“自由度”的总数足够小以适合计算机的内存。比例与自由度无关。 另一方面,准确度高度依赖于自由度的数量、问题的类型和所使用的求解器。
要问的关键问题是:
- 对于这个特定问题,哪些“物理”最重要?
- 需要多少准确度?
无论规模如何,这两个问题都不容易概括为任何问题。因此,实际上不可能以任何一般意义上的方式回答您的问题。这实际上取决于您要建模的问题类型以及您真正需要的准确度。
这在很大程度上取决于 CFD 问题的类型和所使用的方法。但作为一个粗略的开始,使用轻量级几何多重网格进行压力求解和显式时间步长计算速度,假设每个单元有 100 个字节。如果您有 8 GB 的内存,则可以解决大约 8000 万个单元的问题。这可能会比您想要的要慢,因为显式 CFD 通常需要很多时间步长,在这种情况下,您应该转向较小的问题规模。如果您使用组装矩阵或 Krylov 方法(这可能会或可能不会使代码运行得更快),则需要更多存储空间。
哇,这是一个开放的问题!
正如已经提到的,答案取决于很多因素。这里只是一些:方法的类型(即有限差分、光谱、有限体积、有限元等)、您家用计算机的功能、您作为程序员的技能、您使用的语言、您用于求解线性系统的算法,显式与隐式时间步长,您可以利用的任何并行化,您愿意等待的时间,您需要多少时间步长......
我假设通过“一般比例”您正在谈论可以在家用 PC 上解决哪些网格大小。对于作为粗略估计的 2D 问题,我会说 O(1024^2) 对于可能有大约 100000 个时间步长的许多问题绝对可行。
除了其他答案之外,让我将其作为比较:如果您不平滑粒子流体动力学,而只是 3d 中斯托克斯方程的传统 Q2xQ1 (Taylor-Hood) 有限元离散化,那么您最终会得到 ~400矩阵的每行非零条目。这意味着仅在矩阵中每个自由度就有约 5000 个字节,如果您想要一个好的预处理器,可能还会再加上那么多。所以每个自由度10kB。(我知道@Jed Brown 会说一个人可以少花钱,或者确实使用无矩阵方法,这都是真的,但为了争论,让我们考虑一种“传统”方法。)
然后,如果你有 16GB 的内存,你总共可以做大约 160 万个未知数。假设均匀网格中的每个单元都有 25 个唯一的自由度,这相当于 64,000 个单元——例如,一个 64x32x32 的网格。这是否适合您的问题是一个取决于您想要做什么的问题。
解决这样的问题需要多长时间?经验法则是,在并行环境中在单个内核上解决 100,000 个未知数将需要 1 分钟。因此,如果您的计算机有 8 个核心,那么每个核心有 200k 个未知数,解决上述规模的斯托克斯系统需要 2 分钟。