gpt4 book ai didi

c++ - 生成一组随机 x、y、z 数,它们之间的差异在定义的限制之间最小

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:52 25 4
gpt4 key购买 nike

因此,我尝试进行分子动力学模拟,并尝试使用均匀分布在整个体积中的随机粒子填充 3D 矩形体积。每个分子都有一个固定的半径 r(球体),其中每个分子的 r 可以不同。所以我希望在体积中生成球体,然后在距该点的 ( 2(r+tolerance) ) 距离内不应存在其他球体(公差会非常小,如 10^-6)。

此外, channel 将具有指定的长度、宽度和宽度,因此随机化应在具有上述类似条件的单个方向上的这些限制内进行,即如果分子更靠近壁,则不应生成分子比它的半径+公差。

我最初尝试的是结构化晶格,但这意味着我的分子数量将与尺寸相关,这对我来说不起作用。所以我写了下面的算法(我想粘贴我的代码,但它不起作用,现在它是一个大的,夸张的困惑,并且差点让我的电脑崩溃一次。

所以逻辑是

1.) 对于每个粒子,使 max_X=X-(radius+tol)。对 Y 和 Z 做同样的事情。

2.) 对于每个粒子,生成介于 0 和 max_X 之间的随机数。

3.) 计算每个粒子之间的距离并创建违反上述任何条件的粒子列表。

4.) 遍历列表并重新生成这些粒子。

5.) 创建另一个违规粒子对列表。

6.) 过去。冲洗并重复,直到列表的大小为零。

所以,它不起作用。我需要此代码最终对大量粒子执行,因此我需要它尽可能高效和 OpenMP 可并行化。我在 for 循环前面使用标准陈词滥调的 #pragma omp parallel for 方法来并行计算,但在运行时,在 super 风扇噪音大约 5-10 分钟后,无论有没有 pragma,它都不起作用。

我是一个非编码背景的人,最近开始学习用 C++ 编写复杂的代码,所以我现在不能做一些像结构、类或指针这样花哨的事情。不过,我正在使用 std::vectors。如果你们能告诉我一条出去的路,我会很高兴,如果你们在罗利市内和附近,我会亲自开车过来给你们一杯冰镇啤酒。几天来一直在尝试这样做,这是我的代码中唯一主要的非功能性内容。

帮助?!!!

PS/EDIT:需要说明的是,这不是家庭作业,否则我早就问教授了。它是一个独立项目的一部分,我将在完成后免费分发。

最佳答案

CGAL正是您所需要的,但请:

“我不能做像结构、类或指针这样花哨的事情”会让你无处可去。我们可以帮助您实现目标,但您还需要至少熟悉结构、类和 STL。

关于c++ - 生成一组随机 x、y、z 数,它们之间的差异在定义的限制之间最小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43844454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com