Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

bestucanB

bestucan

@bestucan
版主 大神
关于
帖子
933
主题
4
群组
2
粉丝
42
关注
0

帖子

最新

  • 关于hexRef8 : Dumping cell as obj to ".../cell_813430.obj"的问题
    bestucanB bestucan

    https://www.cfd-online.com/Forums/openfoam-meshing/133850-snappyhexmesh-problems.html


  • 前处理,进口面问题
    bestucanB bestucan

    icem也有这个功能,只是我没用过,

    https://cfd-china.com/topic/6069/搅拌反应器icem结构网格划分方式/7

    Screenshot from 2024-09-28 14-40-10.png


  • Paraview如何自定义时间间隔
    bestucanB bestucan

    后之览者亦将有感于斯文:xiezuoye:
    https://discourse.paraview.org/t/assign-time-to-a-timestep/3505/2


  • 前处理,进口面问题
    bestucanB bestucan

    虽然我没画过这类网格,但“两个网格边界组合对应一个相邻网格”这种操作应该挺普遍的,因为按区域加密是个挺普遍的需求,比如这个教程里:

    https://www.openfoam.com/documentation/user-guide/4-mesh-generation-and-conversion/4.4-mesh-generation-with-the-snappyhexmesh-utility


  • 关于集群计算积累buff/cache缓存过高的处理办法
    bestucanB bestucan

    @郑学习 是的


  • paraview显示不了粒子,应该怎么设置呢
    bestucanB bestucan

    paraFOAM是编译出来的。安装的paraview不能使用paraFOAM命令。
    paraFOAM和paraview差别不大。可以直接用paraview。
    就是每次查看计算结果多了个步骤:

    touch test.foam

    因为paraview无法自动生成 .foam文件,所以要手动创建


  • Openfoam 每隔一段时间更新流场
    bestucanB bestucan

    你可以先探索一条“手动”实现你想要的功能的方法。

    然后用bash脚本替代“手动”过程。

    写bash脚本的时候直接用gpt,把你想要实现的功能描述清楚,让他生成,你再调

    大概是这么个循环:

    计算一小时间
    然后setfields
    然后修改cotroldic里的计算开始和结束时间

    要修改的时间可以用循环变量乘以周期时间之类的。


  • 关于集群计算积累buff/cache缓存过高的处理办法
    bestucanB bestucan

    性能上的设置,只会影响速度,不会影响“炸不炸”。buff/cache 是用来加速的,所以,即使没有,顶多慢,不会炸。

    应该是内存炸了,swap太太小了,个人计算机都不会这么小。可以把swap理解为虚拟内存。物理内存不够用,就会暂时使用虚拟内存。虽然虚拟内存慢,总不至于完全无法工作。要是物理内存用完了,虚拟内存也用完了,就会炸。

    有一次OpenFOAM的大赛版本升级,导致编译的时候需要十几G的内存,很多人都炸了还找不到原因。


    一般 swap 设置为真实内存的一倍就差不多了。古早时候个人计算机内存小,2G、4G的时候,虚拟内存都设置为三倍左右。现在大了,一倍就差不多了。你这个服务器内存也够大了,哪怕0.5倍呢;再大了即使不炸,也会很慢;结果4G。。。。

    按说那么大内存,能控制好计算任务范围,不用虚拟内存也行。但是你们那么多人用。调大了,即使不炸也会很慢。swap就是抗一下内存占用尖峰,保证不炸,不能依靠。


    另外,很多人用fluent不知道怎么杀干净,留一堆僵尸进程,也会很影响性能。如果有很多cleanup开头的fluent脚本,就是了。正常关闭不会留下这些文件。异常退出就是要用这些文件清理僵尸进程


  • 在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢
    bestucanB bestucan

    @w352405196 对于单个CPU而言,所有的核都用上,不会是最快的,但是慢多少说不清楚。

    因为还要留几个核做些调度工作,(往底层说是芯片上任务分支判断、多任务切换上下文转换、堆栈策略什么的,往系统上说是系统本身有些服务进程一直在后台运行)

    32核跨CPU效率高。可以解释为,对于单个CPU而言,满载32个核都用来任务,还得时不时停下任务做些任务调度工作,所以慢些。分到两个CPU。每个CPU。一半核用于调度工作,一半核用于计算任务。快些也合理。

    当8核的时候。无论是单个CPU还是两个CPU运行,都会有一部分核空闲用于随时的任务调度工作。所以,分到两个CPU上反而慢一些。因为CPU间通信会耗时一些。两个CPU互相不知道对方的工作状态,不如单个CPU统一调度效率高。这个现象也可以理解。

    如果把计算任务理解成打仗。不能让所有人都上战场(所有核用于计算),得留几个人搞后勤支援。否则,就得有些人一会披上铠甲打仗,一边系着围裙搞后勤。后勤保障不上,拖慢整体进度。相比于整体进度拖慢,做后勤的那个核因为做后勤而降低的打仗效率反而不重要了。


    而且,核多不一定快。
    核越多,核间通信的时间成本越大,核间任务调度算法越麻烦,调度效率也越低(总是难免核间互相等待对方的结果才能继续自己的)。

    如果横轴表示计算用的CPU核数量,纵轴表示计算用时,那应该是两头高,中间低。

    影响的因素很多,得具体分析瓶颈在哪里。


  • 在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢
    bestucanB bestucan

    @w352405196 两个CPU呀,那要考虑主板总线带宽的影响了。

    线程开的越多,CPU交换数据越频繁。总线堵了,速度可不是上不去了。

    CPU和内存交换数据也是要通过总线的。所以,程序即使往硬盘读写不频繁。但是计算一定要从内存读指令和数据的。所以,可以查查你的主板型号,看看它的总线对多CPU或者说高性能计算的支持怎么样


  • 在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢
    bestucanB bestucan

    @w352405196 CPU呀,都顶到100%了。

    硬盘读写都为0,说明硬盘没限制速度。

    还有不小的上传下载流量。这个计算是跨节点的?

    进程gs_test只占用60%左右,cpu都能顶到100%。这是还有些进程因为权限没显示出来。

    可能和网络通信有关


  • 在工作站中测试openfoam并行效率很低,大佬们帮忙看看是什么导致的呢
    bestucanB bestucan

    下载一个gotop二进制文件。github上有。跑代码的时候再开一个终端看gotop的各项指标,哪个满了就是哪个卡脖子🤣🤣🤣


  • openfoam火灾燃烧模拟
    bestucanB bestucan

    @李东岳 现在社会语境下的“道友”几乎约等于“同志”:chigua2:


  • openfoam火灾燃烧模拟
    bestucanB bestucan

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


  • 如何在把下面这个东西画成图
    bestucanB bestucan

    @李东岳 :140: ,效果很好。还能把点调大点,调成正方形,然后就可以没有空隙了。pointtype, pointsize这些


  • 求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢
    bestucanB bestucan

    @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.

    我应该理解对注释了吧:134:


  • 求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢
    bestucanB bestucan

    @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.7602
    
    

    split1就是OF里的操作,和ori完全不一样。

    split2和ori结果一样,因为只是旋转分成两次,而不是还交换顺序

    旋转的内容好像也不是角度?pi是力矩相当于“旋转”中的力。惯性矩相当于“旋转”中的质量。力除以质量是加速度。加速度乘以时间是速度增量。当然这里的"速度"是“旋转”中的速度,即角速度。

    1/2 * t * a是啥,参考匀变速运动公式,还是能找到挺多意义的。但是把这些东西乘起来。。。猜不出来。得结合更多的代码上下文看了。不过我没用过这个求解器,不太了解。


  • 如何在把下面这个东西画成图
    bestucanB bestucan

    pointValue.txt :

    # x y z
    0.1 0.1 4
    0.1 0.124 5
    0.2 0.4 2
    0.3 0.5 4.5
    

    pointValue.gplt :

    set 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
    
    

    pointValue.pdf :
    pointValue.jpg

    这可以改颜色: http://gnuplot.info/demo/pm3dcolors.html


  • 求助,在使用interdymfoam得到结果以后如何计算得到船舶的纵倾与横摇呢
    bestucanB bestucan

    哦哦,这个是旋转矩阵。位姿控制(位置、姿态)里的内容。按说还要考虑位移。如果考虑位移就是4x4的矩阵了。在机器人控制里,多关节的机械臂末端位姿计算里会用到4x4的矩阵,如果考虑位移可以搜搜看。

    Screenshot from 2024-07-05 18-39-00.png

    如果你可以翻墙的话:图片来源

    如果从矩阵得到角度也有挺多人写了代码了。可以搜搜。


  • OpenFOAM与libtorch的数据对应
    bestucanB bestucan

    @李东岳 在 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就是我写的公式了,我和大佬想一起了,真是英雄所见略同(。・`ω´・)

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]