帖子
-
关于hexRef8 : Dumping cell as obj to ".../cell_813430.obj"的问题 -
前处理,进口面问题 -
Paraview如何自定义时间间隔 -
前处理,进口面问题虽然我没画过这类网格,但“两个网格边界组合对应一个相邻网格”这种操作应该挺普遍的,因为按区域加密是个挺普遍的需求,比如这个教程里:
-
关于集群计算积累buff/cache缓存过高的处理办法@郑学习 是的
-
paraview显示不了粒子,应该怎么设置呢paraFOAM是编译出来的。安装的paraview不能使用paraFOAM命令。
paraFOAM和paraview差别不大。可以直接用paraview。
就是每次查看计算结果多了个步骤:touch test.foam
因为paraview无法自动生成 .foam文件,所以要手动创建
-
Openfoam 每隔一段时间更新流场你可以先探索一条“手动”实现你想要的功能的方法。
然后用bash脚本替代“手动”过程。
写bash脚本的时候直接用gpt,把你想要实现的功能描述清楚,让他生成,你再调
大概是这么个循环:
计算一小时间
然后setfields
然后修改cotroldic里的计算开始和结束时间要修改的时间可以用循环变量乘以周期时间之类的。
-
关于集群计算积累buff/cache缓存过高的处理办法性能上的设置,只会影响速度,不会影响“炸不炸”。buff/cache 是用来加速的,所以,即使没有,顶多慢,不会炸。
应该是内存炸了,swap太太小了,个人计算机都不会这么小。可以把swap理解为虚拟内存。物理内存不够用,就会暂时使用虚拟内存。虽然虚拟内存慢,总不至于完全无法工作。要是物理内存用完了,虚拟内存也用完了,就会炸。
有一次OpenFOAM的大赛版本升级,导致编译的时候需要十几G的内存,很多人都炸了还找不到原因。
一般 swap 设置为真实内存的一倍就差不多了。古早时候个人计算机内存小,2G、4G的时候,虚拟内存都设置为三倍左右。现在大了,一倍就差不多了。你这个服务器内存也够大了,哪怕0.5倍呢;再大了即使不炸,也会很慢;结果4G。。。。
按说那么大内存,能控制好计算任务范围,不用虚拟内存也行。但是你们那么多人用。调大了,即使不炸也会很慢。swap就是抗一下内存占用尖峰,保证不炸,不能依靠。
另外,很多人用fluent不知道怎么杀干净,留一堆僵尸进程,也会很影响性能。如果有很多cleanup开头的fluent脚本,就是了。正常关闭不会留下这些文件。异常退出就是要用这些文件清理僵尸进程
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@w352405196 对于单个CPU而言,所有的核都用上,不会是最快的,但是慢多少说不清楚。
因为还要留几个核做些调度工作,(往底层说是芯片上任务分支判断、多任务切换上下文转换、堆栈策略什么的,往系统上说是系统本身有些服务进程一直在后台运行)
32核跨CPU效率高。可以解释为,对于单个CPU而言,满载32个核都用来任务,还得时不时停下任务做些任务调度工作,所以慢些。分到两个CPU。每个CPU。一半核用于调度工作,一半核用于计算任务。快些也合理。
当8核的时候。无论是单个CPU还是两个CPU运行,都会有一部分核空闲用于随时的任务调度工作。所以,分到两个CPU上反而慢一些。因为CPU间通信会耗时一些。两个CPU互相不知道对方的工作状态,不如单个CPU统一调度效率高。这个现象也可以理解。
如果把计算任务理解成打仗。不能让所有人都上战场(所有核用于计算),得留几个人搞后勤支援。否则,就得有些人一会披上铠甲打仗,一边系着围裙搞后勤。后勤保障不上,拖慢整体进度。相比于整体进度拖慢,做后勤的那个核因为做后勤而降低的打仗效率反而不重要了。
而且,核多不一定快。
核越多,核间通信的时间成本越大,核间任务调度算法越麻烦,调度效率也越低(总是难免核间互相等待对方的结果才能继续自己的)。如果横轴表示计算用的CPU核数量,纵轴表示计算用时,那应该是两头高,中间低。
影响的因素很多,得具体分析瓶颈在哪里。
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@w352405196 两个CPU呀,那要考虑主板总线带宽的影响了。
线程开的越多,CPU交换数据越频繁。总线堵了,速度可不是上不去了。
CPU和内存交换数据也是要通过总线的。所以,程序即使往硬盘读写不频繁。但是计算一定要从内存读指令和数据的。所以,可以查查你的主板型号,看看它的总线对多CPU或者说高性能计算的支持怎么样
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢@w352405196 CPU呀,都顶到100%了。
硬盘读写都为0,说明硬盘没限制速度。
还有不小的上传下载流量。这个计算是跨节点的?
进程gs_test只占用60%左右,cpu都能顶到100%。这是还有些进程因为权限没显示出来。
可能和网络通信有关
-
在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢下载一个gotop二进制文件。github上有。跑代码的时候再开一个终端看gotop的各项指标,哪个满了就是哪个卡脖子🤣🤣🤣
-
openfoam火灾燃烧模拟@李东岳 现在社会语境下的“道友”几乎约等于“同志”

-
openfoam火灾燃烧模拟不对称应该也不算错误吧。比如说蜡烛的火焰,有的可以稳定燃烧,而有的是跳跃燃烧。这是一种空气湍流?

-
如何在把下面这个东西画成图@李东岳
,效果很好。还能把点调大点,调成正方形,然后就可以没有空隙了。pointtype, pointsize这些 -
求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢@CFDngu 这个运算符重载真是。。。放右边结果是左乘。。。
无论是左乘还是右乘,都没有交换律。所以,应该都不是一个角度分两次旋转、旋转顺序的问题。然后
6DoF定义的orientation叫做“rotation tensor”
这个,是因为,应该是这样的:所有船体与外界的交互,都是基于世界坐标系的。所以要把世界坐标系的力应用到船体上,就要把力之类的各种矢量张量旋转到船体坐标系去和船体交互。
还有另外一个猜测。两个坐标系之间的转换,可以通过三个旋转矩阵达到。也可以通过一个旋转轴和一个旋转矩阵达到。
我猜测,可能这个
0.5Rx-0.5Ry-Rz-0.5Ry-0.5Rx
是在组那一个旋转矩阵,或者找那一个旋转轴。如果有了这个特殊的旋转轴,那么船体的"orientation"就确实是“rotation tensor”了
以上都是我猜的
_(:3」∠)_哦,对了,这句"所以要把世界坐标系的力应用到船体上,就要把力之类的各种矢量张量旋转到船体坐标系去和船体交互。"不是猜的。是代码注释:
Angular momentum stored in body fixed reference frame. Reference orientation of the body (where Q = I) must align with the cartesian axes such that the Inertia tensor is in principle component form. Can add restraints (e.g. a spring) and constraints (e.g. motion may only be on a plane).
The time-integrator for the motion is run-time selectable with options for symplectic (explicit), Crank-Nicolson and Newmark schemes.
我应该理解对注释了吧

-
求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢@CFDngu 我看了搜了一大堆也没搞懂。但是可以明确一点。这个操作不是“把旋转分两次完成”。因为矩阵没有交换律,所以先转后转不一样,这是matlab测试代码
Rx = rotx(36); Ry = roty(20); Rz = rotz(80); ori = Rx * Ry * Rz Rx2 = rotx(18); Ry2 = roty(10); Rz2 = rotz(40); split1 = Rx2 * Ry2 * Rz2 * Rz2 * Ry2 * Rx2 split2 = Rx2 * Rx2 * Ry2 * Ry2 * Rz OUTPUT: ori = 0.1632 -0.9254 0.3420 0.8316 -0.0575 -0.5523 0.5308 0.3746 0.7602 split1 = 0.1383 -0.8604 0.4906 0.9844 0.0650 -0.1635 0.1088 0.5055 0.8559 split2 = 0.1632 -0.9254 0.3420 0.8316 -0.0575 -0.5523 0.5308 0.3746 0.7602split1就是OF里的操作,和ori完全不一样。
split2和ori结果一样,因为只是旋转分成两次,而不是还交换顺序
旋转的内容好像也不是角度?
pi是力矩相当于“旋转”中的力。惯性矩相当于“旋转”中的质量。力除以质量是加速度。加速度乘以时间是速度增量。当然这里的"速度"是“旋转”中的速度,即角速度。1/2 * t * a是啥,参考匀变速运动公式,还是能找到挺多意义的。但是把这些东西乘起来。。。猜不出来。得结合更多的代码上下文看了。不过我没用过这个求解器,不太了解。 -
如何在把下面这个东西画成图# x y z 0.1 0.1 4 0.1 0.124 5 0.2 0.4 2 0.3 0.5 4.5set terminal pdfcairo enhanced color size 15cm,10cm font 'Verdana, 10' #set terminal pngcairo size 800,600 enhanced font 'Verdana,10' # Set output file set output 'pointValue.pdf' # Set title and labels set title 'Plot with Point Coordinates and Values' set xlabel 'X-axis' set ylabel 'Y-axis' set zlabel 'Z-axis' # Set grid set grid # Set data style set style data points # Load the data file and plot it plot 'pointValue.txt' using 1:2:3 with points pointtype 7 pointsize 1.5 palette -
求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢哦哦,这个是旋转矩阵。位姿控制(位置、姿态)里的内容。按说还要考虑位移。如果考虑位移就是4x4的矩阵了。在机器人控制里,多关节的机械臂末端位姿计算里会用到4x4的矩阵,如果考虑位移可以搜搜看。

如果你可以翻墙的话:图片来源
如果从矩阵得到角度也有挺多人写了代码了。可以搜搜。
-
OpenFOAM与libtorch的数据对应@李东岳 在 OpenFOAM与libtorch的数据对应 中说:
我刚试了一下,如果是140140的网格,总共19600个单元。pixel - 1 - i + jpixel最大编号干到140-1 - 139 + 139*140是19460?
由李老师的第一贴里的图片可知OpenFOAM方格里,最大索引数字是24,在右上角。
右上角在libtorch里的坐标是(0, pixel)
所以应该是
pixel - 1 - i + j*pixel = 140-1-0+139*140=19599这个公式不只是二维数组切换成一维数组(二维数组写成一维很简单,乘以行长加一起就行了)
这个公式还完成了一个“旋转”。旋转的是“递增索引”的方向。OpenFOAM是竖着从下往上。libtorch是横着从左往右。所以有点绕。
pixel = 5就是我写的公式了,我和大佬想一起了,真是英雄所见略同
(。・`ω´・)


