@Thomas_Huster
你在这include了文件,但是在你的make文件里面并没有提供相关的目录和地址,所以程序自然找不到在哪。你需要调整你的make文件的路径
星星星星晴
帖子
-
Euler-Lagrange的一些解析,sprayFoam -
Euler-Lagrange的一些解析,sprayFoam@youhaoyu 因为你是基于kinematic parcel做的,说不准你做的很多东西都可能在别的地方植入过。
有的时候你觉得你植入对了,但是很有可能你并没有,这边差一点,那边差一点。而且有一些模型并没有在kinematiccloud中真的植入。有可能就是一个空的头文件。
最好你植入一点,查一点。我建议你捋顺整个of的library,在哪个地方call cloud,cloud在什么地方call 的什么方程,到底call了几次。慢慢查,整着整着就熟了。
我之前可能在某个帖子里面发过我当时对lagranian这部分的理解的流程图,你可以借鉴一下。
不要纠结于具体某个模型,先搞懂框架,然后思考你要植入的东西具体应该植入到哪边,然后通过看看相似的其他植入,具体问题具体分析吧。git有很多repo 有的论文作者会分享出来的。 -
Euler-Lagrange的一些解析,sprayFoam@youhaoyu 你这个想法是对的,我们也是那么植入p的interpolation的。
cfdonline一般没人回 就是多查 有空可以看看chalmers 的openfoam的课,里面有很多学生的project。很有帮助 -
Euler-Lagrange的一些解析,sprayFoam比如你的particle diameter 应该通过p.d()获得。你的rhoc 是打算使用网格中心值还是考虑是有parcel点的插值?都是有算法的。
整体来说,你这个算法不能这么直接从别的地方生搬硬套。要根据你用的cloud,parcel,根据怎么获取parcrl这个struct内的内容来处理。建议你一步一步来,一行一行写,编译,测试。不能一口吃个胖子
-
Euler-Lagrange的一些解析,sprayFoam@youhaoyu 应该是p.d()什么的吧。如果你在kinematicparcel.h等地方定义了的话,你应该通过p.xxx()赋值。另外如果你需要流场速度是可以通过两个方式获得,p.uc()插值的值或者通过mesh获得网格中心的数据吧
你的问题很具体,我也很久没接触OF了。所以建议你多去google。
-
给我干蒙了都是红帽系的。一个命令就能从centOS转到Rocky这边。我们学校超算现在就是这个系统。
-
Euler-Lagrange的一些解析,sprayFoam@好学者 在 Euler-Lagrange的一些解析,sprayFoam 中说:
大佬,你好!我有一些问题想问问,sprayFoam是基于欧拉-拉格朗日框架下进行喷雾模拟,我看了一些论文在用sprayFoam求解器计算喷雾时,其数值方法介绍时会介绍一些控制方程,其中会写 gas phase(论文里的小标题就写的气相控制方程)或Carrier phase的控制方程使用LES或者RANS的湍流模型,然后dispersed phase或Liquid phase的在拉格朗日框架下求解了喷雾包的质量、动量和能量控制方程。那么我想问一下,
1、那么只有在欧拉框架下的连续相才能使用LES或者RANS湍流模型对吗- 可能你有点混淆流体力学中的欧拉观点和拉格朗日观点才有这个问题。至少在我个人的经历中,通常,流场都是在欧拉框架下求解的。求解的时候使用了 LES 和 RANS的湍流模型。所以才会有你所说的连续相下使用LES RANS湍流模型
2、这里的gas phase或Carrier phase的气相是指的什么?是喷雾室环境里的气体(N2)吗?是N2对液体喷雾工质造成的湍流的影响吗?
- 个人理解,Carrier Phase 可以算是总称。
- 什么是carrier phase,在多相流里面,最少涉及到2个相(气/液/固)。其中,主要的那一相就是Carrier phase, 另外一个离散的,被包裹的相也就是离散相(相不是项)。例子:bubble column中,水就是carrier phase,气泡就是被包裹的那一相,也就是离散相。比如旋风分离器中,气体就是carrier phase,颗粒就是离散相。所以这个就是相对的。在喷雾中,气相/气体就是carrierphase。当然也有喷雾工作在其他的条件下,所以不一定是你说的
N_2
3、是不是在sprayFoam里的喷雾子模型里设置的喷射工质都是按照拉格朗日粒子进行计算的(一个parcel里有多个相同属性的液滴,然后喷射出大量parcel发展成雾化过程),即液体喷雾工质都是按照离散相计算吗?那么拉格朗日粒子不会产生连续的液柱吗?
- 如你所说,所有的离散相都是按照parcel进行计算的,一个parcel中包含np个particle。如同@youhaoyu 同学解释的那样。
- 如你所说,没有连续的液柱。所以在考虑雾化模型的时候就有所谓的TAB,KHRT等模型。如同@youhaoyu 所说。
- 另外,拉格朗日这边,也就是parcel这边,需要通过统计学的方式计算相关的参数。
4、如果上述问题3是正确的,那么喷射出来是不是就已经是雾化好的小液滴,这里的雾化小液滴和parcel是不是有所区别?
- 喷射出来的不一定是雾化好的小液滴。这个要看你的模拟到底位于喷雾的什么区,要看你要模拟什么物理现象。你喷出来的东西是雾化后的参数那就是雾化后的,如果你需要考虑atmozation model的话 那么你就不是雾化好的液滴。要根据你的具体设置具体分析
- 有区别,parcel代表的是np个有相同性质的雾化小液滴的集合。相同尺寸,质量相加
5、在工质喷射过程中,从喷嘴口区域到喷雾发展完全的底部区域如下图:
虚线的区域是不是都是parcel组成,那么这一块都是离散相吗?-
首先你并没有解释说你这个是哪个field,流场的速度场?如果是流场的速度场的话,那么这个并不是离散相。
-
离散相是那些液滴,需要你额外在paraview中加载的。不知道你使用的那个版本的OF,在OF5以后,加载拉格朗日场会略微有点复杂。建议你在网上找一下解决办法,不同版本有不同或者近似的解决办法。
-
其次,在OF中并没有使用统计的方法把拉格朗日的速度场写出来。所以你需要使用统计的方法,比如在你的domain中添加一个面,统计在1s内通过这个面的颗粒的速度和大小,然后就可以其对应网格的颗粒的平均速度,平均尺寸等信息。不然你在of中查看到的只是瞬时值。
6、如果我想在喷雾过程中增加闪沸(即有气泡成核、长大和破碎过程),那么怎么植入气泡呢?我想是在一个parcel里植入气泡,如果我上述说的正确,那么就是在一个parcel(因为里面是同种属性小液滴,是不是可以看做连续相)里增加了一个气相(这样是不是在一个parcel控制体内出现了两相流),那么这个气相是不是也是应该在拉格朗日框架下计算相应的控制方程。这样是不是相当于一个拉格朗日框架下嵌套了另一个拉格朗日框架进行计算?
-
parcel就是point-mass,就是一个点/一个变量/一个c语言中的sturct ,他包含了他的尺寸,密度等信息。但是他在计算的过程中并不会物理上的存在。例如,两个液滴半径都是1cm,在计算的时候,就是两个点p1, p2。 当两个液滴的质心距离效率2cm的时候,在真实世界中,两个液滴就发生了碰撞。但是在模拟中,如果你不考虑碰撞模型的话,两个液滴就是两个点。距离是小于2cm的两个点。没有任何物理现象自然的发生。
-
同理,如果你考虑在parcel中添加气相。你就要考虑到对其相关的物理性质进行修改。例如,原来一个液滴直径1cm,那么
p1.d()=100mm, p1.rho() = 998
.然后你想到,oh,这个液滴在什么条件下需要添加了气相,那么你就可以对这个parcel添加一个代表有气相的物理相。 还是p1
,添加一个参数叫p1.y() = 0.2
。当液滴中有了气相以后,相对的就要对其他对应的参数进行修改,p1.d()=105mm
,p1.rho()=800
。这个东西通常是使用spraycloudproperties文件中的compositionModel来调整和计算的的。可以调整你的parcel中都有什么相,每个相的百分比,相关的热力学参数。这部分我并没有太多的经验,mixture这个东西是很复杂的。 -
并没有所谓的嵌套了另外一个拉格朗日框架,都是在一个框架中的。
总体来说,所谓的欧拉拉格朗日的多相流模拟,简单的来说就是在普通的/常见模拟中添加另外的一个离散相,并将其视为质点。然后看这个离散相相是受到外部流体怎么样的影响。很基础,应用的就是牛二定律
F=ma
。然后你就需要对这个parcel所受的力进行建模,常见的drag,lift,bouyancy等(BBO equation)。在不同的情况下应用不一样的模型,比如体积密度比较大, 那么drag就要使用不一样的模型。这个离散相是被流场所影响的就是所谓的1-way coupling,同时离散相也是会对流场产生影响的(反馈:外部流场速度因为parcel而减慢,由于parcel的运动产生的湍流等),如果考虑进去的话就是2-way coupling,即在NS方程中添加一个source term。如果考虑离散相相内部的关系的话(液滴碰撞)就是所谓的4-way coupling。有一点需要你注意,对于离散相的某些特征,比如在某个测量面的数据,请参照我在Q5所说的内容。需要大量的数据统计。推荐一本书:Computational Fluid Dynamics of Dispersed Multi-Phase Flows - Martin Sommerfeld, ISBN - 978-91-633-3564-8.
你肯定能在什么地方找到。这里面基本上包含了所有你需要的基础知识。@youhaoyu 感谢你的分享。
-
给我干蒙了大佬别用CentOS了。不维护了
建议换Rocky Linux -
Euler-Lagrange的一些解析,sprayFoam@ann Hi 我好久没有碰OF了,没有办法给你精准的结果。
但是我建议你查一下源程序, 看看哪一项是控制质量流量,np是怎么计算的,尺寸分布是怎么算的等。
建议你可以先从最简单的情况,比如喷射多少个尺寸多大的particle,然后一点一点 你就知道什么是什么了。 -
CFDEM运行过程中断,MPI_ABORT was invoked on rank 9看起来你上一步LIGGGHTS计算完了,导入到OF中出错了吧。检查检查是不是LIGGGHTS给OF的数据出错了。
-
Euler-Lagrange的一些解析,sprayFoam@dxl 首先要看你基于的哪个cloud做的,并不是所有的cloud都真实的包含了颗粒碰撞。要查一下code确认你的程序是不是真正的引用了碰撞模型。
其次,OF中的碰撞模型是O'Rourke的碰撞模型,是计算碰撞概率的,不是deteministic的(不知道中文怎么说)。即不是追踪所有颗粒,计算两个颗粒的路径,判断两个颗粒是否会发生碰撞的方法。
基于OF10的话,你可以在下面找到具体的源程序。
OpenFOAM-10/src/lagrangian/parcel/submodels/Spray/StochasticCollision /ORourkeCollision/
-
请问这两种并行命令有区别么?回复一个远古的问题,留个纪念。
根据最近上过的有关并行计算的课,现代CPU都是以ccNUMA作为一个单位。例如下面这台电脑有2个Socket,每个Socket有2个ccNUMA,每个ccNUMA包含18个核心,每个核心有2个线程(所谓的超线程)。
为什么要分的这么仔细,原因之一就是这是因为现代CPU的高速缓存有部分(例如L3)是共享的,有部分是私有的(L1和L2)。访问缓存是有速度限制的,所以如果正确的分配核心的话,可以避免'交通拥挤‘。而且如果数据是储存在另外一个ccNUMA对应的缓存中的话,额外的访问延迟也是导致计算速度下降的原因之一。这点在OpenMP中格外明显和重要。至于MPI的话,MPI和OpenMP有本质上的差别,并且MPI可能涉及到多个Node间的网络延迟,所以这方面更加复杂。
Anyway,至少在一个Node中,不要使用超线程的线程,就使用物理核心。如果有条件可以在BIOS中关闭超线程。如果没有条件可以通过likwid找到那些Thread归属于什么位置。然后通过taskset进行固定。likwid中有个程序叫做likwid-topology,从此可以得到当前Node中的CPU的拓扑结构。如下面的内容。
多个Node暂时没有经验。但是可以通过profile对使用某些线程进行限制,我当前是没有经验的。
至于是不是对于计算速度有绝对的提升,这个我没有结论,但是如果你需要考虑有关性能的方向的话,这种控制变量也是必要的。
-------------------------------------------------------------------------------- CPU name: Intel(R) Xeon(R) Platinum 8360Y CPU @ 2.40GHz CPU type: Intel Icelake SP processor CPU stepping: 6 ******************************************************************************** Hardware Thread Topology ******************************************************************************** Sockets: 2 Cores per socket: 36 Threads per core: 2 -------------------------------------------------------------------------------- HWThread Thread Core Die Socket Available 0 0 0 0 0 * 1 0 1 0 0 * 2 0 2 0 0 * 3 0 3 0 0 * 4 0 4 0 0 * 5 0 5 0 0 * 6 0 6 0 0 * 7 0 7 0 0 * 8 0 8 0 0 * 9 0 9 0 0 * 10 0 10 0 0 * 11 0 11 0 0 * 12 0 12 0 0 * 13 0 13 0 0 * 14 0 14 0 0 * 15 0 15 0 0 * 16 0 16 0 0 * 17 0 17 0 0 * 18 0 18 0 0 * 19 0 19 0 0 * 20 0 20 0 0 * 21 0 21 0 0 * 22 0 22 0 0 * 23 0 23 0 0 * 24 0 24 0 0 * 25 0 25 0 0 * 26 0 26 0 0 * 27 0 27 0 0 * 28 0 28 0 0 * 29 0 29 0 0 * 30 0 30 0 0 * 31 0 31 0 0 * 32 0 32 0 0 * 33 0 33 0 0 * 34 0 34 0 0 * 35 0 35 0 0 * 36 0 36 0 1 * 37 0 37 0 1 * 38 0 38 0 1 * 39 0 39 0 1 * 40 0 40 0 1 * 41 0 41 0 1 * 42 0 42 0 1 * 43 0 43 0 1 * 44 0 44 0 1 * 45 0 45 0 1 * 46 0 46 0 1 * 47 0 47 0 1 * 48 0 48 0 1 * 49 0 49 0 1 * 50 0 50 0 1 * 51 0 51 0 1 * 52 0 52 0 1 * 53 0 53 0 1 * 54 0 54 0 1 * 55 0 55 0 1 * 56 0 56 0 1 * 57 0 57 0 1 * 58 0 58 0 1 * 59 0 59 0 1 * 60 0 60 0 1 * 61 0 61 0 1 * 62 0 62 0 1 * 63 0 63 0 1 * 64 0 64 0 1 * 65 0 65 0 1 * 66 0 66 0 1 * 67 0 67 0 1 * 68 0 68 0 1 * 69 0 69 0 1 * 70 0 70 0 1 * 71 0 71 0 1 * 72 1 0 0 0 * 73 1 1 0 0 * 74 1 2 0 0 * 75 1 3 0 0 * 76 1 4 0 0 * 77 1 5 0 0 * 78 1 6 0 0 * 79 1 7 0 0 * 80 1 8 0 0 * 81 1 9 0 0 * 82 1 10 0 0 * 83 1 11 0 0 * 84 1 12 0 0 * 85 1 13 0 0 * 86 1 14 0 0 * 87 1 15 0 0 * 88 1 16 0 0 * 89 1 17 0 0 * 90 1 18 0 0 * 91 1 19 0 0 * 92 1 20 0 0 * 93 1 21 0 0 * 94 1 22 0 0 * 95 1 23 0 0 * 96 1 24 0 0 * 97 1 25 0 0 * 98 1 26 0 0 * 99 1 27 0 0 * 100 1 28 0 0 * 101 1 29 0 0 * 102 1 30 0 0 * 103 1 31 0 0 * 104 1 32 0 0 * 105 1 33 0 0 * 106 1 34 0 0 * 107 1 35 0 0 * 108 1 36 0 1 * 109 1 37 0 1 * 110 1 38 0 1 * 111 1 39 0 1 * 112 1 40 0 1 * 113 1 41 0 1 * 114 1 42 0 1 * 115 1 43 0 1 * 116 1 44 0 1 * 117 1 45 0 1 * 118 1 46 0 1 * 119 1 47 0 1 * 120 1 48 0 1 * 121 1 49 0 1 * 122 1 50 0 1 * 123 1 51 0 1 * 124 1 52 0 1 * 125 1 53 0 1 * 126 1 54 0 1 * 127 1 55 0 1 * 128 1 56 0 1 * 129 1 57 0 1 * 130 1 58 0 1 * 131 1 59 0 1 * 132 1 60 0 1 * 133 1 61 0 1 * 134 1 62 0 1 * 135 1 63 0 1 * 136 1 64 0 1 * 137 1 65 0 1 * 138 1 66 0 1 * 139 1 67 0 1 * 140 1 68 0 1 * 141 1 69 0 1 * 142 1 70 0 1 * 143 1 71 0 1 * -------------------------------------------------------------------------------- Socket 0: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 ) Socket 1: ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 ) -------------------------------------------------------------------------------- ******************************************************************************** Cache Topology ******************************************************************************** Level: 1 Size: 48 kB Cache groups: ( 0 72 ) ( 1 73 ) ( 2 74 ) ( 3 75 ) ( 4 76 ) ( 5 77 ) ( 6 78 ) ( 7 79 ) ( 8 80 ) ( 9 81 ) ( 10 82 ) ( 11 83 ) ( 12 84 ) ( 13 85 ) ( 14 86 ) ( 15 87 ) ( 16 88 ) ( 17 89 ) ( 18 90 ) ( 19 91 ) ( 20 92 ) ( 21 93 ) ( 22 94 ) ( 23 95 ) ( 24 96 ) ( 25 97 ) ( 26 98 ) ( 27 99 ) ( 28 100 ) ( 29 101 ) ( 30 102 ) ( 31 103 ) ( 32 104 ) ( 33 105 ) ( 34 106 ) ( 35 107 ) ( 36 108 ) ( 37 109 ) ( 38 110 ) ( 39 111 ) ( 40 112 ) ( 41 113 ) ( 42 114 ) ( 43 115 ) ( 44 116 ) ( 45 117 ) ( 46 118 ) ( 47 119 ) ( 48 120 ) ( 49 121 ) ( 50 122 ) ( 51 123 ) ( 52 124 ) ( 53 125 ) ( 54 126 ) ( 55 127 ) ( 56 128 ) ( 57 129 ) ( 58 130 ) ( 59 131 ) ( 60 132 ) ( 61 133 ) ( 62 134 ) ( 63 135 ) ( 64 136 ) ( 65 137 ) ( 66 138 ) ( 67 139 ) ( 68 140 ) ( 69 141 ) ( 70 142 ) ( 71 143 ) -------------------------------------------------------------------------------- Level: 2 Size: 1.25 MB Cache groups: ( 0 72 ) ( 1 73 ) ( 2 74 ) ( 3 75 ) ( 4 76 ) ( 5 77 ) ( 6 78 ) ( 7 79 ) ( 8 80 ) ( 9 81 ) ( 10 82 ) ( 11 83 ) ( 12 84 ) ( 13 85 ) ( 14 86 ) ( 15 87 ) ( 16 88 ) ( 17 89 ) ( 18 90 ) ( 19 91 ) ( 20 92 ) ( 21 93 ) ( 22 94 ) ( 23 95 ) ( 24 96 ) ( 25 97 ) ( 26 98 ) ( 27 99 ) ( 28 100 ) ( 29 101 ) ( 30 102 ) ( 31 103 ) ( 32 104 ) ( 33 105 ) ( 34 106 ) ( 35 107 ) ( 36 108 ) ( 37 109 ) ( 38 110 ) ( 39 111 ) ( 40 112 ) ( 41 113 ) ( 42 114 ) ( 43 115 ) ( 44 116 ) ( 45 117 ) ( 46 118 ) ( 47 119 ) ( 48 120 ) ( 49 121 ) ( 50 122 ) ( 51 123 ) ( 52 124 ) ( 53 125 ) ( 54 126 ) ( 55 127 ) ( 56 128 ) ( 57 129 ) ( 58 130 ) ( 59 131 ) ( 60 132 ) ( 61 133 ) ( 62 134 ) ( 63 135 ) ( 64 136 ) ( 65 137 ) ( 66 138 ) ( 67 139 ) ( 68 140 ) ( 69 141 ) ( 70 142 ) ( 71 143 ) -------------------------------------------------------------------------------- Level: 3 Size: 54 MB Cache groups: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 ) ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 ) -------------------------------------------------------------------------------- ******************************************************************************** NUMA Topology ******************************************************************************** NUMA domains: 4 -------------------------------------------------------------------------------- Domain: 0 Processors: ( 0 72 1 73 2 74 3 75 4 76 5 77 6 78 7 79 8 80 9 81 10 82 11 83 12 84 13 85 14 86 15 87 16 88 17 89 ) Distances: 10 11 20 20 Free memory: 53444.9 MB Total memory: 64038.5 MB -------------------------------------------------------------------------------- Domain: 1 Processors: ( 18 90 19 91 20 92 21 93 22 94 23 95 24 96 25 97 26 98 27 99 28 100 29 101 30 102 31 103 32 104 33 105 34 106 35 107 ) Distances: 11 10 20 20 Free memory: 52998.7 MB Total memory: 64504.1 MB -------------------------------------------------------------------------------- Domain: 2 Processors: ( 36 108 37 109 38 110 39 111 40 112 41 113 42 114 43 115 44 116 45 117 46 118 47 119 48 120 49 121 50 122 51 123 52 124 53 125 ) Distances: 20 20 10 11 Free memory: 57461.9 MB Total memory: 64504.1 MB -------------------------------------------------------------------------------- Domain: 3 Processors: ( 54 126 55 127 56 128 57 129 58 130 59 131 60 132 61 133 62 134 63 135 64 136 65 137 66 138 67 139 68 140 69 141 70 142 71 143 ) Distances: 20 20 11 10 Free memory: 35591.3 MB Total memory: 64450.5 MB --------------------------------------------------------------------------------
-
Euler-Lagrange的一些解析,sprayFoamhi,我已经好久没碰OF了。
但是我看起来 你可以先将calcDiameter 不要用function的方式植入,先用最简单的方式直接添加到 calc中。你把Ro()也转换成类似Re的那种简单的定义方式。
scalar Ro = xxxx
因为OF是一层一层的按照template编译的,所以你现在这个处理办法要一层一层往上走,改了底层的,你先按照简单植入办法植入,然后当你发现你不得不突破OF的限制了以后,再考虑其他的办法。
-
如何在把下面这个东西画成图GPT说:
在C++环境下,你可以使用一些图形库来绘制这个云图,比如OpenGL或者SFML。以下是一个简单的示例代码,使用SFML库来绘制一个简单的云图:#include <SFML/Graphics.hpp> #include <vector> int main() { // 创建窗口 sf::RenderWindow window(sf::VideoMode(800, 600), "Cloud Map"); // 创建星号位置信息和压力值 std::vector<sf::Vector2f> positions = {sf::Vector2f(100, 100), sf::Vector2f(200, 200), sf::Vector2f(300, 300)}; std::vector<int> pressures = {5, 6, 7}; // 创建圆形表示星号 std::vector<sf::CircleShape> circles; for (int i = 0; i < positions.size(); i++) { sf::CircleShape circle(5); circle.setPosition(positions[i]); circles.push_back(circle); } // 主循环 while (window.isOpen()) { // 处理事件 sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } // 清空窗口 window.clear(); // 绘制圆形 for (int i = 0; i < circles.size(); i++) { circles[i].setFillColor(sf::Color(255, 255, 255, pressures[i] * 25)); // 根据压力值设置颜色的透明度 window.draw(circles[i]); } // 显示窗口内容 window.display(); } return 0; }
除了使用OpenGL、SFML和gnuplot之外,还有其他方法可以绘制云图,比如使用OpenCV库。以下是一个简单的示例代码,使用OpenCV库来绘制一个简单的云图:
#include <opencv2/opencv.hpp> #include <vector> int main() { // 创建一个空白图像 cv::Mat cloudMap = cv::Mat::zeros(600, 800, CV_8UC3); // 创建星号位置信息和压力值 std::vector<cv::Point> positions = {cv::Point(100, 100), cv::Point(200, 200), cv::Point(300, 300)}; std::vector<int> pressures = {5, 6, 7}; // 在图像上绘制星号 for (int i = 0; i < positions.size(); i++) { cv::circle(cloudMap, positions[i], 5, cv::Scalar(255, 255, 255), -1); } // 显示图像 cv::imshow("Cloud Map", cloudMap); cv::waitKey(0); return 0; }
-
如何在把下面这个东西画成图问GPT啊
-
Euler-Lagrange的一些解析,sprayFoam我刚看到,相信一年多过去你肯定已经解决了。
- 在0/ 文件夹中,添加lagrangian的文件夹,提供parcel所需的相关信息即可。setFields 应该也行,但是我的第一反应是这个方案。
- 随inlet边界?就是patchinjection, PatchFlowRateInjection 等喷射模型吧。
- 在spraycloudproperties中设置的C7H16是parcel的,在外面的/constant文件夹中是外面的气体。在paraview中,parcel是parcel,流场是流场。你可以轻松的看出来。在时间步中的lagrangian文件夹中也能看到每个物质的量的
-
Euler-Lagrange的一些解析,sprayFoam@youhaoyu
你好,
我不知道你说的RP方程是什么。但是如果你是用欧拉拉格朗日法做气泡的话,其实很简单,就是调整parcel的直径就可以了p.d()。
当然你需要在合适的位置去调整。
另外如果欧拉拉格朗日的话,你要考虑cell中parcel的体积,这个是有限制的。我也不记得那个参数是什么了,论坛里之前我好像有聊过。如果做OpenFOAM的话,不懂编程其实是不行的。
当然你也不需要懂得多深,多看,多想,有基础的方法就行。
祝收敛 -
求助:用CFDEM耦合模拟悬移质的可行性?@吴建民 我前两天看LIGGGHTS已经被替代了吧。我个人经验是 OF5 - OF8 在拉格朗日部分计算速度有很大的提升。
千万级别的颗粒是什么意思,是你要追踪千万级别?还是说一共千万个颗粒,在domain中只有10w个? 或者你考虑一下 一个parcel代表更多的particle。
如大佬所说,你如果考虑碰撞,什么碰撞模型?deterministic的话根本不可能。
-
openfoam提高计算速度有哪些方法原来并没有考虑过这样的问题,但是现在因为做别的课题了,触类旁通吧。仅代表个人意见
首先,我认为是网格,你的网格是不是够好,对你关注的区域是不是密集的,不需要关注的区域是不是需要稀疏的网格,你稀疏的区域是不是对你整体的结果没有影响,或者说你稀疏的区域是不是不重要。你的几何是不是太大,或者太小,需不需要考虑类似backflow等问题。
其次,时间步长是多少?Co是多少?等等
再次,在网格数量和核心数量这边就是有相关性的,你如何分配每个核心有多少网格。比如你有一个计算密集区,你就分配一个核心,那肯定其他的算力就被浪费了。你如何decompose也是个学问。
再次,你是不是用了正确的迭代方法,GAMG还是什么,这些参数你有没有挑对,你调参数对结果是不是有影响?收敛标准是什么?
再次,你得看你自己植入的模型是不是写的足够的好。是不是你植入的模型有更好的算法。比如一个循环,你想想是不是有没有用的iteration,是不是有更好的方法,可不可以屏蔽一些无效计算
最后,你可以考虑比如说OF是不是可以用别的编译器,不用GCC, Intel,你可以用其他的工具分析性能,找到你的程序里面的hotspot等。
你的问题太general,希望有同样问题的小伙伴看到帖子,能有所帮助
祝收敛~
-
【分享+搬运】自定义非均匀inlet U没事,找到错误就好。这个方法其实比较笨,因为每次你修改网格,就要重新处理一遍数据。
有的时候会麻烦一些。祝收敛