Questions tagged «simulation»

仿真是使用代表性模型来模仿实际物理过程或系统行为的过程。

7
量子力学定律在模拟中在哪里分解?
作为拥有物理学学士学位的人,当我开始进行分子模拟时,我有点被丑化了。发现即使是最详细且计算最昂贵的模拟也无法从第一原理中定量地再现水的全部行为,这真是令人震惊。 以前,我给人的印象是,量子力学的基本定律是一个已解决的问题(除了重力,通常认为在分子尺度上与重力无关)。但是,似乎一旦尝试扩大这些定律并将其应用于比氢原子更大或更复杂的任何事物,它们的预测能力就会开始崩溃。 从数学的角度来看,我了解到波浪函数很快变得太复杂而无法解决,并且需要近似(如Born-Oppenheimer)来使波浪函数更易于处理。我还了解到,随着所研究系统的时间和空间比例的增加,这些近似值会引入误差,误差会越来越大。 这些近似误差中最大和最显着的性质是什么?如何获得对这些错误的直观了解?最重要的是,我们如何才能采用从头开始的方法,使我们能够准确地模拟整个分子和分子种群?阻止人们开发此类仿真的最大未解决问题是什么?

5
并行科学计算软件开发语言?
我想从头开始开发并行科学计算软件。我想开始使用哪种语言。该程序涉及将数据读/写到txt文件中,并并行进行大量计算,并具有许多LU分解和使用稀疏线性求解器的功能。我在考虑的候选解决方案是带有OpenMP或协同阵列的Fortran 2003/2008,带有openmp cilk +或TBB的C ++,python。任何其他有文件记录的建议,我们都欢迎!我非常了解C,Fortran和Java(按此顺序)。我已经在python中完成了一些脚本编写工作,但是基本的东西。 我知道fortran很快,但是很难维护和并行化。据说C ++运行缓慢,除非您使用外部库等我喜欢的Python,但是在其上编写全面的工业级软件是否现实? 该软件需要能够处理大量数据并通过科学计算有效。性能至关重要。 对于背景,我已经有一个用Fortran编写的工作软件。许多人参与了很多年的开发,并且代码真的很脏。维护和并行化代码被证明是一场噩梦,我正在考虑其他选择。 佩特罗斯

3
粒子分解和域分解并行化算法的优缺点是什么?
我正在使用几个软件包(例如Gromacs和DL_POLY)运行分子动力学(MD)模拟。 Gromacs现在支持粒子分解和域分解算法。默认情况下,Gromacs模拟使用域分解,尽管直到最近,多年以来,粒子分解是Gromacs中唯一实现的方法。在Gromacs的一篇论文(DOI 10.1002 / jcc.20291)中,作者给出了最初选择粒子分解的原因: “早期的设计决策是选择使用粒子分解而不是域分解来将工作分配到处理器上。在后一种情况下,将空间域分配给处理器,这使得仅通过本地通信即可快速找到空间邻居,但是会带来复杂性对于跨越空间边界的粒子而言,域分解是一个更好的选择,只有当线性系统的大小大大超出相互作用范围时,分子动力学中才很少发生这种情况,通过粒子分解,每个处理器都可以计算力和坐标/速度更新对于预先分配的粒子,使用预先计算的邻居列表均匀分布在处理器上。F我 ĴF一世ĴF_{ij}从颗粒之间的一对相互作用产生一世一世i 和ĴĴj,这是需要两种粒子的速度更新和 一世一世iĴĴj,仅计算一次,并传达给其他处理器。每个处理器将系统的完整坐标集保留在其本地内存中,而不是将存储限制在所需的坐标范围内。这更简单并节省了通信开销,而内存要求通常根本不是限制因素,即使对于数百万个粒子也是如此。另一方面,可以包含多达1000倍粒子数量的邻居列表分布在处理器上。基本上,通信仅限于围绕处理器环的每个时间步发送一次坐标和力。这些选择随着时间的推移被证明是可靠的,并且很容易适用于现代处理器集群。” 句子“仅当线性系统的大小大大超过相互作用范围时,才是域选择是一个更好的选择,这在分子动力学中很少见”,它们是什么意思?从上面的段落中,我得到一种想法,即粒子分解的优点是不必处理跨域边界移动的粒子。相反,您只需要为每个处理器有足够的内存来存储整个系统配置即可。因此,粒子分解看起来非常有利,而域分解看起来非常不利。 我确信这是一个非常复杂的问题(可能是许多书籍的主题),但是基本上,如果粒子分解看起来如此有利,为什么有人需要使用域分解? 如果系统规模很大(使每个处理器都难以或不可能存储整个配置),则域分解是否有利?基于上面引用的段落,我不确定为什么最近刚将域分解作为Gromacs中的默认并行化算法。 似乎现在的DL_POLY(版本4)也使用域分解。从版本4手册中: “以这种方式对配置数据进行划分是基于原子在模拟单元中的位置,系统数据的这种几何分配是DD算法的特点。请注意,为了使该策略有效地起作用,系统必须具有合理均匀的密度,以便为每个处理器分配几乎相等的原子数据部分(尽可能多),通过这种方法,在处理器和该方法在概念上很简单,尽管编程很麻烦,但在概念上却很简单,特别适合效率最高的大规模仿真。 ... 在使用DD策略的情况下,SHAKE(RATTLE)算法比DL_POLY Classic的“复制数据”方法更简单,后者需要原子位置的全局更新(合并和剪接)。” 这听起来好像域分解是好的,因为它可能更有效,即使可能更难以实现。 另一方面,以前的版本(DL_POLY Classic)使用了复制数据并行化,这似乎是粒子分解的另一个名称。从该版本的手册中: 复制数据(RD)策略是在MD中实现并行化的几种方法之一。从配置数据的并行计算机中的每个节点(在复制其名称导出即阵列限定的原子坐标,速度 ,和力,对于全部[R一世[R一世\textbf{r}_iv一世v一世\textbf{v}_iF一世F一世\textbf{f}_iññN在模拟系统中的每个原子都在每个处理节点上重现。在这种策略中,大多数力的计算和运动方程的积分可以在节点之间轻松而平等地共享,并且在很大程度上可以在每个节点上独立进行处理。该方法编程相对简单并且相当有效。而且,它很容易在单个处理器上“崩溃”运行。但是,该策略在内存中可能很昂贵,并且具有较高的通信开销,但总的来说,它已被证明在各种应用程序中都是成功的。 该段似乎与该问题的第一段基本一致,不同之处在于它说复制的数据/粒子分解具有“高通信开销”。Gromacs论文的段落似乎相反-粒子分解是更可取的,因为它比域分解具有较低的通信开销。 你有什么想法吗?

4
任意精度可伸缩绳索仿真
我正在尝试模拟绳索对象。我了解的公式是由弹簧连接的一系列粒子。这些弹簧具有非常大的k值,因此线会变形,但拉伸很少。我得出的结论是,在闭合形式中不可能解决作为时间函数的问题,因为绳索是钟摆(不是闭合形式)的推广。 然后解决近似解决方案。我需要一个可扩展的算法。我看到的示例使用显式或隐式欧拉积分来移动粒子。这不会扩展。 要看到这一点,请考虑具有n个节点的绳索。向一端施加很大的力。由于绳索的拉伸不应太大,因此另一端的加速度必须是立即的。 但是,通过欧拉融合,将任何力量施加到另一端都需要n步。我注意到一个指数下降:如果第一个节点加速一定量,则相邻节点的加速较小(如果它们以相同的速度加速,则该算法不稳定)。因此,相邻节点是节点加速更慢! 因此,对于n个节点而言,加速度几乎可以忽略不计。这导致绳索明显伸展。如果只想使模拟的分辨率加倍,则突然需要采取小几十或几百倍的时间步才能获得类似的行为。 我正在寻找一种解决此问题的简单方法-即,高分辨率模拟仅需多项式时间额外的计算即可收敛到该解决方案。可以使用矩阵和线性代数技术的完整库。我对经典力学的知识非常好,而且我知道一些数值分析。
12 simulation 

2
为什么有限元的形状很重要?
我已经使用FEA几年了,但是正确使用和使用FEA是两件事,安全系数并不是解决所有问题的方法。我有种感觉,除非对这个问题有明确的答案,否则我不会正确使用它: 我知道元素必须接近其理想形状(仅基于雅可比矩阵?)才能获得准确的结果。但是为什么呢?既然我知道它来自坐标变换,那么除非元素的两个向量成为共线的,否则无论其形状如何,结果都不准确吗? 基于图示示例(任意应力分布)的逐步答案将是理想的,尤其是考虑到这是一个相对常见的问题(但从我所见到的答案中从来没有得到很好的回答)。


1
流体模拟中的边界条件
我正在使用涡旋粒子/“涡旋”进行2D流体模拟,如《视频游戏的流体模拟》中所述。我认为与“离散涡旋法”相同。基本上,您用定义好的涡度的粒子集合来表示流体,并使用比奥特-萨伐定律(例如:,其中p2-p1是在样本点和vorton之间位置的差,瓦特是涡(在三维的矢量),和- [R是vorton和采样点之间的欧几里德距离) 。v=ω×(p2−p1)4πr3v=ω×(p2−p1)4πr3v = \frac{\omega \times (p_2-p_1)}{4\pi r^3}p2−p1p2−p1p_2-p_1wwwrrr 我试图在流体中引入一个盒子,让它来回移动并影响流体。这意味着要考虑盒子的防滑和不贯通边界条件。(也就是说,在盒子的边界处,相对流体速度为0)。 现在,我正在采样盒子和流体在盒子周围80个点的相对速度。我还在盒子周围放置了80个vorton,但向外偏移了一点。我形成一个大矩阵,并求解涡度所需的涡度值,以抵消采样点处的流体速度(使用线性最小二乘法)。 这几乎可行,但是我注意到,我得到的解决方案高度依赖于采样点和涡流的确切布局。 有时,我会得到交替旋转的方向不同的沃尔顿模式(蓝色点是逆时针旋转的沃尔顿,红色点是顺时针旋转的沃尔顿): 其他时候,我将所有vorton放在框的左侧以一种方式旋转,而所有vorton则以另一种方式旋转,如该图所示: 我认为第二张照片是我真正想要的。我还认为这两种不同的解决方案意味着我正在使用的方程组太受约束。添加其他采样点有时会有所帮助,有时却没有帮助。 我是否可以添加其他边界条件以帮助我获得所需的结果?凭直觉,我没有采取任何措施来考虑在距包装盒一定距离处流体受到多大的干扰。我在想也许我可以添加边界层限制的条件。但是我不确定到底会是什么样。 另外,我是否可以参考任何相关文献来研究基于涡旋粒子的流体模拟如何处理这类边界条件?

3
最大化未知噪声功能
我感兴趣的最大化函数,其中θ ∈ [R p。F(θ)f(θ)f(\mathbf \theta)θ∈Rpθ∈Rp\theta \in \mathbb R^p 问题是我不知道函数或其派生类的解析形式。我能做的唯一的事情是评价功能的逐点,通过在插入值,并获得噪声估计˚F(θ *),在这一点上。如果我愿意,我可以减少这些估计的可变性,但是我必须支付增加的计算成本。 θ∗θ∗\theta_*f^(θ∗)f^(θ∗)\hat{f}(\theta_*) 到目前为止,这是我尝试过的: 具有有限差异的随机最陡下降:它可以工作,但需要大量的调整(例如,增益序列,比例因子),并且通常非常不稳定。 模拟退火:它可以工作并且可靠,但是需要大量功能评估,因此我发现它相当慢。 因此,我想就在这种情况下可以使用的替代优化方法提出建议/想法。我将问题尽可能地笼统,以鼓励来自与我不同的研究领域的建议。我必须补充一点,我对一种可以使我估计收敛时的黑森州的方法非常感兴趣。这是因为我可以用它来估计参数的不确定性。否则,我将不得不在最大值附近使用有限的差异来获得估计值。θθ\theta

4
傅里叶伪谱方法与数值耗散
使用傅立叶伪谱方法(Orzag&Patterson,PRL,1972)使用FFT执行各向同性湍流的直接数值模拟。有关在湍流社区中广泛使用的方法的背景知识,请参见以下课程:http : //www.math.ualberta.ca/~bowman/m655/lab3d.pdf 使用所谓的 2/32/32/3 去交易的规则包括 u^(k,t)=0 if k>23kMAXu^(k,t)=0 if k>23kMAX\begin{equation} \hat{u}(\mathbf{k},t)=0~~~~~~~~~~~~~~if~~~k > \frac{2}{3} k_{MAX} \end{equation} 哪里 ttt 是时候了 kk\mathbf{k} 是波数, kMAXkMAXk_{MAX} 是最大波数, u^u^\hat{u} 是速度的频谱幅度。 脱脱是否充当数值耗散?换句话说,是否由于脱碳而导致能量泄漏?

1
如何找到耦合系统的Lyapunov指数
Answer 提供了一个用于计算混沌同步中耦合振荡器的条件Lyapunov指数(CLE)的软件。但是,它很难遵循,并且没有图形的图形输出(并且以C语言表示,更为复杂)。有谁知道如何修改LET Toolbox,这对于非耦合系统非常有用,但是我不了解如何使用同步系统来适应CLE。 我对如何在计算CLE的雅可比矩阵时包含驾驶员信号感到困惑,因为理论上说为响应系统找到了CLE,所以我们不必为驾驶员以及响应系统找到雅可比矩阵。类似的振荡器(驱动和响应)。还是应该在软件中同时考虑驱动系统和响应系统,并像对待单个系统一样进行处理? 如果在CLE中,如何在状态方程中适应外部强迫(如随机过程)。 CLE还有其他实现吗? 谢谢
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.