@Lee-scut-wind 入口进来的几层粗网格基本把高频就衰减完了
coolhhh
帖子
-
-
@pengdi 没有收缩段,RANS结果就是很差的,LES即使入口只加平均风,也比RANS结果精确很多
-
网格分辨率不足,对高频能量过滤是正常的
-
- URANS(Unsteady Reynolds-Averaged Navier-Stokes)就是用RANS湍流模型+瞬态求解器(pisoFoam,pimpleFoam),如果用simpleFoam求解器就是稳态,就不应该用时变的边界
- 没有试过其他5个面都设置速度入口。因为算的不可压缩湍流,我的理解是要能计算至少得满足5个面在每个瞬时的通量总和等于0,即流入等于流出。没看过有人这么设置过,一般都会设置个出口,通过计算自动调整出口的通量,使得满足不可压缩条件
- 既然算瞬态,可以用LES模拟,采用WALE湍流模型,0文件夹只需要设置p,U,nut
- 建议先拿一个简单的长方体空风洞开始,先测试只有1个速度入口+1个出口(侧面和顶面用symmetry),再测试2个速度入口+2个出口(顶面用symmetry),依次增加速度入口个数测试,最后才是看5个面都是速度入口能否算
-
@做在江湖
correctBoundaryConditions
参考贴子 关于压力场边界更新的实现机制的疑问我测试
dsmcFoam
算例结果是,boundaryU
每个时刻都一样,没有更新。所以猜测是否跟没执行correctBoundaryConditions
有关 -
- 这是算URANS吗?计算的建筑绕流?
- top面为何也是速度入口,如果改为symmetry看看
- U的east和south,你设置了pressureInletOutletVelocity,我没用过这个,一般设置为zeroGradient或者inletOutlet。
对应p的east和south,设置为fixedValue为0
-
@做在江湖 搜了DSMCCloud.C,其他物理量有使用
correctBoundaryConditions
,但boundaryU
没有这个操作,是否可以尝试在某个地方把boundaryU.correctBoundaryConditions()
加上,看看是否有效果 -
@做在江湖 我测试了of2206一个自带算例
freeSpaceStream
,测试boundaryU
设置timeVaryingMappedFixedValue
,dsmcFoam
计算结果确实只加载了第0
时间步的结果,但不同时刻保存的结果都是value nonuniform List<vector>
inlet { type timeVaryingMappedFixedValue; fieldTable boundaryU; mapMethod nearest; offset constant (0 0 0); value nonuniform List<vector> 256 ( (299.1814153 29.37670706 68.29947456) (299.4299067 29.62701704 68.44470993) (299.6766025 29.87764649 68.59053715)
pisoFoam
的pEqn.H
有U.correctBoundaryConditions()
更新边界值。简单看了dsmcFoam
求解器代码,没有correctBoundaryConditions
,不太清楚是否跟这个有关 -
@做在江湖 保存
dsmcFoam
不同时刻结果,比如0.5s
的结果,此时0.5s
结果的U
文件中,inlet
面的边界条件是否还是timeVaryingMappedFixedValue
类型,还是更改了其他的?我曾经
0
文件设置了timeVaryingMappedFixedValue
,pisoFoam
求解器中想通过一些操作改变入口加载的速度,但似乎没有成功,都依然最后按照timeVaryingMappedFixedValue
加载的风速进行计算。也可能是我当时哪里没写对现在你的问题确实像是
dsmcFoam
改变了timeVaryingMappedFixedValue
-
@做在江湖
0
文件夹比如速度U
的设置如下所示。保存不同时刻的结果,看U
文件的inlet
数据是否差异,看看是否读取成功。或者能否改用
pisoFoam
试算一下,看看是否能读取不同时刻的数据。如果可以,那就说明是dsmcFoam
的问题。再看看dsmcFoam
中是否对inlet
边界有额外的操作,使得每个时刻只用了第一个时刻的数据?timeVaryingMappedFixedValue
这个边界,如果controlDict
设置的endTime
大于所提供的数据文件夹最大的时刻,比如endTime=9s
,boundaryData
提供数据到2s
,计算到2s
后就只会按照提供最后2s
时刻的数据一直算下去。boundaryField { inlet { type timeVaryingMappedFixedValue; offset (0 0 0); setAverage off; mapMethod nearest; //planarInterpolation, nearest }
-
用
timeVaryingMappedFixedValue
,在constant
创建文件夹boundaryData
,按格式要求准备不同时刻的数据。参考帖子LES定义入口速度的问题(DSRFG方法) -
相关资料:
- 综述《Brunton S L, Noack B R, Koumoutsakos P. Machine learning for fluid mechanics[J]. Annual review of fluid mechanics, 2020,52:477-508.》,Steven L. Brunton 的youtube对应视频:Machine Learning for Fluid Mechanics,B站有人搬运:https://space.bilibili.com/426717813
- Steven L. Brunton 的开源书籍《Machine Learning, Dynamical Systems and Control》,网站是 https://databookuw.com/ ,有对应翻译中文版《数据驱动的科学和工程》出版
-
李老师,问了下gpt的回复:
将监督学习、无监督学习和强化学习这三种主要的机器学习方法与计算流体力学(CFD)结合,可以实现不同的目标和改进。以下是各自如何与CFD结合的一些思路:
1. 监督学习
监督学习是通过输入输出映射关系来训练模型的方法,需要有标签的数据集。
- 参数预测:可以用于根据输入条件如速度、压力等预测流体流动的结果,例如温度分布、应力分布等。
- 代理模型:建立CFD仿真结果的代理模型,即快速而粗糙的模型,来近似模拟复杂的CFD模型,可以大幅减少仿真时间。
- 数据同化:用于整合实验数据和模拟数据,监督学习方法可以用来校准模拟模型以提高其预测能力。
2. 无监督学习
无监督学习不需要标签数据,主要用于发现数据之间的关系和结构。
- 流动模式识别:可以用于从复杂的流场数据中识别和归类流动结构或模式,如涡量检测。
- 降维分析:对高维度的CFD数据进行降维,发现数据的主要变化趋势,便于可视化和进一步分析。
- 聚类分析:可以将流场数据的不同状态进行聚类,用于研究流体行为的不同阶段。
3. 强化学习
强化学习是对智能体采取行动在环境中获得最大奖励的问题,适用于决策过程。
- 优化控制:例如,在设计流体动力控制系统时,强化学习可以用来找到最佳操作策略,如在航空中的飞行路径优化。
- 实时仿真调整:在与实验数据联合仿真的场景中,可以使用强化学习实时调整边界条件或模拟参数,以提升模拟的精确度。
4. 综合应用
- 多学习模型集成:可以综合使用监督学习、无监督学习和强化学习的方法对复杂的CFD问题进行分析,比如先用无监督学习进行模式识别,然后用监督学习构建相应的响应模型,最后通过强化学习进行控制策略的优化。
-
下载个手机版的向日葵,如果手机也上不去大概率就是国外网络问题。或者试试看 Todesk 这个远程软件能用不
-
-
默认标记其实是均匀分布的,不均匀是因为边缘上最大和最小值和刻度间距不匹配导致的,感觉上还是需要手动调整显示范围。或者看能不能搞个
Tools | Start Trace
录制个调整显示范围,然后Tools | Stop Trace
,如下图所示
-
然后打开
python shell
,每个时间步修改上述代码中的显示范围,在python shell
终端中输入修改的脚本,实现调整显示范围
-
自动化调整的话,一个思路是看看能不能在脚本中获取当前时间步的最大值和最小值,写个python代码自动修改最大值和最小值,添加
Macros
,每次都一键运行
-
-
-
0时间步的
U
,是用湍流生成方法直接生成的,可以计算得到div(U)
。然后就可以计算div(phi)
:U -> phi = fvc::flux(U) -> div(phi)
。测试结果是,这种方式计算的div(U)
和div(phi)
结果基本一样的,区别是小数点后五六位。此时div(U)=div(phi)=0
稍微步进一个时间步,of输出的
U
和phi
,就会出现div(U)不等于0
,div(phi)=0
是做建筑领域的,DNS搞不了,还是做的LES
-
谢谢李老师,文章已经发表了,只是好奇做个对比。在想的问题是,一直以来各种湍流生成方法都在追求实现生成零散度的湍流场
U
,我们直接构造的是0时刻的U
,而不是phi
。根据测试结果看,如果严格让
div(U)=0
, 此时U -> phi = fvc::flux(U) -> div(phi)
得到的div(phi)
也基本等于0。但这种情况下0时刻的湍流特性会变化的比较大,结果会变差。of在后面时间步计算输出的
U
实际上不满足div(U)=0
,所以想法是0时刻提供的初始U
也不需要强制要求div(U)=0
,这样得到的结果可能才是更合理的。 -
李老师,我做了简单的对比:
-
下面计算的
div(U)
与div(phi)
结果基本相等,区别是小数点后五六位
①直接求div(U)
②已知U
->phi = fvc::flux(U)
->div(phi)
-
接着对比
reconstruct(phi)
。编译mypisoFoam
,把pEqn.H
中计算U修改为
U = fvc::reconstruct(phi); // U = HbyA - rAU*fvc::grad(p);
同样计算计算of2206自带一个算例:Decay of homogeneous isotropic turbulence,模拟结果:
(1)对比div(U)
与div(phi)
的均值和标准差。采用reconstruct(phi)
,得到的div(U)
的均值和标准差要小一点。这里有个注意点是,of计算的div(phi)
,基本数值都很小,但会有一个比较大的数,下面的计算结果是剔除了这个最大数的计算结果。
(2)对比湍流特性。可以看出
reconstruct(phi)
结果要更差,还是原本of的U = HbyA - rAU*fvc::grad(p)
计算准确
-
-
最近在看《胡非, 湍流、间歇性与大气边界层. 1995》,看到里边这段话,有种莫名感动
-
理解了,谢谢李老师
-
@李东岳 谢谢李老师,这样能理解,还有个小疑问。我们可以从
U
计算phi=fvc::flux(U)
,那么如果已知phi
,能不能反算出U
?这样的话U
与phi
就能完全对应上,此时计算就能满足div(U)=div(phi)
。但of中后面接着用U = HbyA - rAU*fvc::grad(p)
计算U
,才导致了这个不对应问题,而U
才是我们最后要得到的结果,但这个结果却没能满足零散度。 -
@李东岳 李老师,发现一个问题。
- 如果用
myphi = fvc::flux(U)
计算,然后求div(myphi)
和div(U)
结果基本是一致的。 - 问题出现在PISO算法中,
pEqn.H
采用phi = phiHbyA - pEqn.flux()
得到phi
,U
通过U = HbyA - rAU*fvc::grad(p)
得到。若接着计算myphi = fvc::flux(U)
,此时myphi
与phi
结果不一致。 - 具体算例结果:
(1)编译了mypisoFoam
,参考createPhi.H
创建myphi
,pEqn.H
中最后增加myphi = fvc::flux(U);
,计算输出phi,myphi,U
,接着算
postProcess -func "div(U)" postProcess -func "div(phi)" postProcess -func "div(myphi)"
(2)取部分结果展示:
①phi
结果internalField nonuniform List<scalar> 774144 ( 9.2226869e-06 -1.2808218e-05 3.6560601e-06 -1.834312e-06 -1.5738475e-05 -5.2343047e-06 -3.6611478e-06
②
myphi
结果internalField nonuniform List<scalar> 774144 ( 9.0864005e-06 -1.2188111e-05 3.3814109e-06 -1.946668e-06 -1.5267671e-05 -5.1722677e-06 -3.3374742e-06
③
div(U)
结果internalField nonuniform List<scalar> 262144 ( -0.40218979 0.59941437 0.85901197 -2.6335161 -0.55062117 -0.53919284 2.4044185 1.1295023 -1.7101542
④
div(myphi)
结果internalField nonuniform List<scalar> 262144 ( -0.40218974 0.59941339 0.85901118 -2.6335163 -0.55062104 -0.53919262 2.404419 1.1295015 -1.710154
⑤
div(phi)
结果internalField nonuniform List<scalar> 262144 ( -3.1704547e-08 -6.3409098e-07 6.3409098e-07 8.9515991e-16 -2.1136366e-07 3.3818186e-07 1.0568183e-07 -4.2272732e-07 -5.7068188e-07
- 结果分析:
①phi
与myphi
的值看起来差别不大。
②但div(phi)
结果基本等于0;div(U)
和div(myphi)
结果一样,但不等于0。
问题:既然phi
定义为fvc::flux(U)
,为何of中最后输出phi不用fvc::flux(U)
,而是用了phi = phiHbyA - pEqn.flux()
?此时计算的通量myphi=fvc::flux(U)
,实际上也没满足div(myphi)=0
- 如果用
-
这个涉及到缩尺比问题,各种参数缩尺比,具体看不同物理量。可以参照物理实验与全尺寸的缩尺比设置。对比结果还只能对比无量纲的参数,对比有量纲还要转换下缩尺比。但网格差矩很大,比如LES模拟的过滤程度感觉上可能是非线性的,因此不能单纯直接比较结果,结果肯定有差距。
-
centos7能装openfoamv2212,但比ubantu费点劲,并且centos7也不再更新了,能用ubantu就用ubantu
-
谢谢李老师,输出
div(phi)
就基本等于0了。这样的话如果想生成一个初始零散度U场,对于of来说其实应该考虑U
计算得到的phi
满足div(phi)=0
,而不是div(U)=0
-
参考李老师的icoFoam解析,PISO算法在根据式(32)计算得到$p^*$,再根据式(31)得到 $\mathbf{U}^{**}$,此时的$\mathbf{U}^{**}$应该满足零散度条件:$\nabla\cdot{\mathbf{U}^{**} }=0$。
但是在计算of2206自带一个算例:Decay of homogeneous isotropic turbulence,用postProcess -func "div(U)"
输出不同时刻的div(U)
,并求最大值、最小值、均值和标准差,发现0.28,0.66 s的div(U)
结果并不是一个很小的值。尝试设置tolerance=1e-10
,结果也是基本一样;更改nCorrectors=5
,结果也是一样。
问题:是否理论上$\nabla\cdot\mathbf{U}^{**} =0$,但数值误差影响导致结果不等于0?
-
@csfine thread_loop_c的首字母要小写,下面这个可以跑
#include "udf.h" #include <stdio.h> DEFINE_ON_DEMAND(Read_point) { FILE *fp; Thread *t; Domain *domain; cell_t c; Node *node; int n; domain = Get_Domain(1) ; fp = fopen("data.txt", "a+"); fprintf(fp, "x y"); #if RP_3D fprintf(fp , " z") ; #endif fprintf(fp, "\n"); thread_loop_c(t, domain) { begin_c_loop(c, t) { c_node_loop(c, t, n) { node = C_NODE(c, t, n); double x = NODE_X(node); double y = NODE_Y(node); #if RP_3D double z = NODE_Z(node); fprintf(fp, "%g %g %g\n", x, y, z); #else fprintf(fp, "%g %g\n", x, y); #endif } } end_c_loop(c, t); } fclose(fp); }
-
@lizhisongsjtu
单进程执行Rotex -latestTime > log.Rotex-single
并行执行,20改为实际用的线程数
decomposePar mpirun -np 20 Rotex -latestTime -parallel > log.Rotex-parallel reconstructPar
-
@RQLI_CFD 看这篇文章有写《刘超群, Liutex-涡定义和第三代涡识别方法. 空气动力学学报, 2020. 038(003): 第413-431,478页.》,需要按照要求跟刘老师发邮件
-
这是算二维的网格吗?之前算过三维方柱绕流,用ICEM的oblock,感觉这种网格质量很差。不知道是否可能网格质量引起的
-
@15735420621 压强为负值,是瞬时值还是平均值为负?不太懂空化流。我是算单项流不可压缩湍流,入口用速度入口,出口用压力出口,当入口的瞬时质量是变得,比如变小了,相当于有抽空的作用;变大了,相当于有额外挤压的作用。此时出口压力出口fixedValue=0,以这个为参考值,流场内的压力就会出现有正有负波动。
-
@15735420621 参考这个帖子OpenFOAM中压力参考点设置疑问,如果有设置边界的p为fixedValue=0,那么压力参考点则没起作用
-
@学流体的小明 因为这算的是多相流,压力参考点能够指定在water还是gas成分上吗?整个water的压力基本一致,如果压力参考点是以water为基准,那么整个water的压力应该都为0。会不会是默认的压力参考点以gas为准,而gas的压力很小接近于0,然后以这个值为参考点,water的压力值就变为-289?
-
@学流体的小明 那如果流场中都是充满气泡,难以有合适的地方设置压力参考点,感觉就只能用速度入口加湍流的方式模拟。或者能否把单向槽道流某一个面的风速时程提取出来作为气泡槽道的速度入口加载。
-
@学流体的小明 我没算过多相流,按照算单向流设置压力参考点有些疑问:
- 我在模拟建筑绕流时候,用的速度入口。此时出口可以设置
fixedValue=0
或者zeroGradient
。设置fixedValue=0
,此时压力参考点没有调用。设置zeroGradient
,此时压力参考点对结果影响就很大,需要设置在建筑物位置上方一定距离且要在建筑物影响范围外,此时建筑物位置附近就不受非物理压力脉动影响。 - 对不可压缩流体流体,速度入口不满足每个瞬时的质量通量平衡,会导致流场发生非物理压力脉动。直观理解就是整个流场每个时刻输入的流量不同,时多时少,就会造成额外的人为挤压或抽空,压力脉动就大。这个时候可以对入口做个简单的质量通量修正,来抑制非物理压力脉动。参考文章:《Kim, Y., I.P. Castro and Z. Xie, Divergence-free turbulence inflow conditions for large-eddy simulations with incompressible flow solvers. Computers & Fluids, 2013. 84: p. 56-68.》
- 当速度入口满足质量通量平衡,无论出口采用
fixedValue=0
或者zeroGradient
,流场里都不会有压力脉动。当入口质量不平衡,采用fixedValue=0
在出口边界压力恒为0,但流场中有压力脉动;采用zeroGradient
,在参考点附近的压力接近与0,此处的建筑模拟结果就会合理,但流场其他地方仍然是存在压力脉动。 - 采用
mapFields
,可能会出现入口质量通量不平衡,但是用的周期边界似乎不存在这个问题。 - 流场中是否有气泡完全不经过的地方?压力参考点的设置的不受气泡影响的位置处
- 尝试入口如果只加平均速度剖面,出口设置
fixedValue=0
,这个时候流场肯定没有压力脉动。再同样测试下气泡槽道中的同样位置的监测点压力,看看是否也是压力脉动过大。如果是的话,那就说明气泡产生的影响不可忽略,就类似于流场中放了个建筑绕流一样,建筑周边就有大的压力波动。 - 原来的单向流槽道用
meanVelocityForce
驱动,因为边界没有指定压力值,应该也调用了压力参考点作用?查看算例是指定了pRefCell 1001; pRefValue 0;
。整个流场应该是压力梯度驱动流动,但查看of自带的Channel395算例结果的压力均值,好像没有明显看到沿着X向的压力梯度?
- 我在模拟建筑绕流时候,用的速度入口。此时出口可以设置
-
- 李老师,我也没具体看到哪个文章用了这两个默认系数,但搜到一个帖子有个观点,帖子中的超链接无法查看:OpenFOAM大涡模拟湍流模型之Smagorinsky模型代码详解
- 无意中看到一个日本CFD网站,看起来$k_{sgs}$与压力计算值有关。
然后看Smagorinsky的推导,这个推导过程也类似的出现$Ck$和$C_e$参数。疑问依然还是第一种方法是如何计算$k_{sgs}$,如果这个问题知道了,那应该能推断出第一种方法与第二种方法的系数$Ck$和$C_e$的关系。
-
1. nut结果对比
nut结果中,case1~case3数值范围都比较接近,但是case4理论上应该与前几个算例结果近似才对,但由于比例系数$1/(C_k^2)=146407$过大,nut计算结果实际是偏大,但数量级都是1e-4
2. tmp<k>结果对比
case3的系数$1/(C_k^2)=1$最小,以这个工况为基准。case3的
tmp<k>
最大值为0.0035319
。
case2的系数$1/(C_k^2)=1419$,理论上case2的最大值应该为0.0035319*1419=5.0117
,实际计算的最大值5.0779
,与理论结果基本一致。
case4的系数$1/(C_k^2)=146407$,数值特别大。理论上case4的最大值应该为0.0035319*146407=517.096
,但实际计算的最大值是42185
,比理论结果偏大,这可能是结果显示的最终时刻0.1s的结果,与前面工况的速度场有点不同,还有计算的数值误差等其他原因导致。 -
Uprime2Mean是fieldAverage的计算结果,不是瞬时的脉动速度。风工程领域经常把速度或压力方差,称作脉动速度或脉动压力。如果要求瞬时的脉动速度,那应该按照你说的这么算
@cfdem小白 在 Smagorinsky模型系数问题 中说:
如果想要知道某时刻的瞬时脉动速度,是否是用该时刻的瞬时速度U减去该时刻的Umean得到?
-
1. 补充说明
因为$k_{sgs}$的值与系数$C_k/C_e$有关。上面33#中的case2和case3,虽然$k_{sgs}$差个1419倍,但注意到这时$C_k/C_e$的数值已经很小了,所以计算结果差别不大。
2. 增加case4
(1)of10中的
Smagorinsky
,设置Ce=0.001,Ck=0.002613472
,同样能够满足Cs=0.065
。
$k_{sgs2}=\nu_{sgs2}^2/(C_k\Delta)^2$中的系数$1/(C_k^2)=146407$,这个时候计算的$k_{sgs}$数值相较于前面的工况大非常多。
(2)case4模拟结果
case4的瞬时速度剖面和平均压力剖面,和cae1(第一种方法)非常相近。这是否可以推测:第一种方法与第二种方法效果要基本一样时,此时的Ce和Ck取值要与case4的取值范围类似?
-
@李东岳 李老师,我把您的程序跑了对比下
1. case1
用第一种方法
mySmagorinsky
设置Ck=0.065
,也就是Cs=0.065
,此时$k_{sgs1}=\nu_{sgs1}^2/(C_s\Delta)^2$中的系数$1/(C_s^2)=236.68$2. case2
用第二种方法:of10中的
Smagorinsky
设置Ce=1.048,Ck=0.0265463553
, 满足Cs=0.065
。
$k_{sgs2}=\nu_{sgs2}^2/(C_k\Delta)^2$中的系数$1/(C_k^2)=1419$3. case3
用第二种方法:of10中的
Smagorinsky
根据30#的猜测,设置了一组可能不合理的组合:Ce=56020, Ck=1
, 但能满足Cs=0.065
。
此时$k_{sgs2}=\nu_{sgs2}^2/(C_k\Delta)^2$中的系数$1/(C_k^2)=1$,与前面两个算例相差特别大
根据$C_e=C_k^3/C_s^4$,可画出下面曲线。
4. 结果对比
根据模拟结果,似乎结果都差别不大。对于of10中的
Smagorinsky
,感觉只要构造出等价的Cs=0.065
,结果基本不变,也就是说$k_{sgs}$似乎没有参与压力计算。(1)瞬时速度
(2)平均速度
(3)脉动速度
(4)瞬时压力
(5)平均压力
(6)脉动压力
-
@coolhhh 更正下符号,当满足
Local equilibrium
时,$P=\epsilon$ -
- 李老师,重新看了这篇文章《Sullivan, P.P., J.C. McWilliams and C. Moeng, A subgrid-scale model for large-eddy simulation of planetary boundary-layer flows. Boundary-Layer Meteorology, 1994. 71: p. 247-276.》,文中对这两种植入方法有个阐述:
(1)第一种方法:
$$\nu_{sgs}=(C_s\Delta)^2\sqrt{2\bfS:\bfS} \tag{1}$$
from an assumed local equilibrium balance between shear production and dissipation in the SGS turbulent kinetic energy (TKE) equation。(2)第二种方法:
$$\nu_{sgs}=C_k\Delta\sqrt{k_{sgs}} \tag{2}$$
solve the TKE equation explicitly. Advantages of such models are that no equilibrium assumption is required, and the prognostic equation provides a direct means of calculating the SGS kinetic energy which is needed to construct the actual pressure.
①看文章意思像是直接对文献中的方程(8)求解,当假设$P=D$的时候,就能与第一种方法得到等价的$C_s$:
$$C_s=\left ( C_k \sqrt{\frac{C_k}{C_e} } \right ) ^{1/2} \tag{3}$$
但根据Smagorinsky SGS model in OpenFOAM | CFD WITH A MISSION 的 推导,of中求解的方程是通过Local equilibrium
得到的,即假设了$P=D$,才得到了$k_{sgs}$的求解方程,与文献中的直接求解TKE方程不需要平衡假设的说法不太一样。
②并且根据论文阐述,Moeng(1984)文章中提到$k_{sgs}$的值是用于计算压力
- 在23#提到第一种方法的$k_{sgs}$是反推出来的,根据式(2)可反推得到$k_{sgs}=\nu_{sgs}^2/(C_k\Delta)^2$。疑问是这里的$C_k$,对于第一种方法是否取值就是$C_s$?
如果$C_k$与$C_s$是不同的取值,那么对对第一种方法仍然还是有未知数$C_k$,无法求$k_{sgs}$;如果$C_k=C_s$,产生的疑问见第3个问题。
- 第一种方法如果$C_k=C_s$,根据式(3),可知:
(1)第一种方法:取$C_s=0.065$,$\nu_{sgs1}$由式(1)计算,那么$k_{sgs1}=\nu_{sgs1}^2/(C_s\Delta)^2$
(2)第二种方法:$C_e=1.048,C_k=0.0265463553$,可得到等价的$C_s=0.065$,此时得到的$\nu_{sgs2}=\nu_{sgs1}$。那么根据式(2)得到$k_{sgs2}=\nu_{sgs2}^2/(C_k\Delta)^2$
(3)若要使得两种方法计算的$k_{sgs1}=k_{sgs2}$,由于$\nu_{sgs2}=\nu_{sgs1}$,因此要求
$$C_s=C_k \tag{4}$$
再联立式(3),可解得两个方法完全等价时需要满足条件:$C_s=C_k, C_e=1/C_k$。
- Moeng(1984)文章中提到$k_{sgs}$的值是用于计算压力。比较两个方法的不同,构造不同系数组合$C_k, C_e$, 使得两种方法有相同的$C_s=0.065$,但计算的$k_{sgs}$差异较大的工况,对比压力是否可能能对比出结果差异?
- 李老师,重新看了这篇文章《Sullivan, P.P., J.C. McWilliams and C. Moeng, A subgrid-scale model for large-eddy simulation of planetary boundary-layer flows. Boundary-Layer Meteorology, 1994. 71: p. 247-276.》,文中对这两种植入方法有个阐述:
-
@cfdem小白 可以看3#的帖子,这是《Moin, P. and J. Kim, Numerical investigation of turbulent channel flow. Journal of fluid mechanics, 1982. 118: p. 341-377.》建议取
Cs=0.065
,然后根据of2206中planeChannel
算例的设置,LES采用Smagorinsky,提到设置Ce=1.048,Ck=0.0265463553,能够Updated to give Cs = 0.065
。我也用这个系数计算过Channel Flow,结果跟实验吻合还比较好 -
@mingyang 如果anaconda的环境给注释掉,of可以正常使用。那是不是用alias 的时候,没有把前人使用的环境注释掉?
alias Anaconda3='PATH=/home/install/Anaconda3/bin:$PATH'
的意思是指要用Anaconda3时候,终端执行Anaconda3才会调用anaconda,类似于of的多版本管理。 -
@mingyang 看看能不能修改bashrc,把Anaconda3用alias加载,不要用export ,这样可能就没冲突
alias Anaconda3='PATH=/home/install/Anaconda3/bin:$PATH'
-
如果每个网格在同个时刻的平均速度是一样的,更简单的方式是按照C程序写法直接读取这条曲线的离散数据,插值出当前时刻的平均速度,并加到
decayingTurbulenceInflowGenerator
中的U[faceI]
-
@strive_DUT 那就可以以
decayingTurbulenceInflowGenerator
的代码为基准,把timeVaryingUniformFixedValue
的中怎么读取这条曲线数据的代码加到一块植入,在最后计算U[faceI]
时候把这两部分相加 -
@strive_DUT
turbulentDFSEMInlet
这个边界也是随时间变化的,没太理解速度分布跟时间相关
与这种随时间变化的湍流有什么区别。最后算U[faceI]
时候公式中增加与当前时间变量公式就可以了
NSRFG在OF里面计算出现的问题
中性大气环境湍流动能的自保持 | 附有算例下载
NSRFG在OF里面计算出现的问题
时变的非均匀速度边界条件timeVaryingMappedFixedValue运行发散
dsmcFoamPlus定义非定常边界条件的方法
时变的非均匀速度边界条件timeVaryingMappedFixedValue运行发散
dsmcFoamPlus定义非定常边界条件的方法
dsmcFoamPlus定义非定常边界条件的方法
dsmcFoamPlus定义非定常边界条件的方法
dsmcFoamPlus定义非定常边界条件的方法
dsmcFoamPlus定义非定常边界条件的方法
CFD与机器学习基本概念入门
CFD与机器学习基本概念入门
向日葵 网络连接异常
请问paraview图例中的标注分布不均匀,如图,该如何设置
请问paraview图例中的标注分布不均匀,如图,该如何设置
pisoFoam计算的U,求div(U)结果为何不是严格等于0
pisoFoam计算的U,求div(U)结果为何不是严格等于0
pisoFoam计算的U,求div(U)结果为何不是严格等于0
一段耐人深思的话
pisoFoam计算的U,求div(U)结果为何不是严格等于0
pisoFoam计算的U,求div(U)结果为何不是严格等于0
pisoFoam计算的U,求div(U)结果为何不是严格等于0
OpenFOAM网格尺寸缩放问题
关于openfoam新手的一些提问与注意事项
pisoFoam计算的U,求div(U)结果为何不是严格等于0
pisoFoam计算的U,求div(U)结果为何不是严格等于0
使用DEFINE_ON_DEMAND编译完成之后出现一些问题
请教:第三代涡识别方法Liutex的代码在linux中运行的问题
请教:第三代涡识别方法Liutex的代码在linux中运行的问题
圆柱计算中无关性验证的问题
open foam的参考压力
open foam的参考压力
interFoam计算气泡槽道流时的压力问题
interFoam计算气泡槽道流时的压力问题
interFoam计算气泡槽道流时的压力问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Smagorinsky模型系数问题
Ubuntu系统下OpenFOAM环境和anaconda有冲,不能并行计算
Ubuntu系统下OpenFOAM环境和anaconda有冲,不能并行计算
各位CFDer,请问速度的依时类边界条件与人工湍流如何同时施加呢?
各位CFDer,请问速度的依时类边界条件与人工湍流如何同时施加呢?
各位CFDer,请问速度的依时类边界条件与人工湍流如何同时施加呢?