关于wedge边界的使用
-
最近看到一篇关于气泡的论文里面的模拟以轴对称方式进行,方便节省计算时间,计算区域是一个具有五度张开角的楔形物,如图所示:
这里有几个问题想请教下大家:
1.这个计算域只计算5度,在后处理时怎么调出完整的,毕竟要看结果。
2.用了wedge边界,相应的0文件里面的p、aplha.water、T该怎么改
3.请问下有什么算例用到wedge边界吗?想学习下。 -
@韬智tz 1.在paraview有个AngularPeriodic过滤器,可以把5°阵列成一圈完整的
2. 0文件的边界条件要根据实验和文献来,比如顶部开口,右边和底部要设成壁面
3. 在算例中直接搜索关键词 grep -r "wedge"找其他的相关算例 -
@xuhuashi 谢谢大佬的回复!
-
@xuhuashi blockMeshDict我这样设置的
convertToMeters 1; vertices ( (0 0 0) (0.02 0 0) (0.02 0.02 0) (0 0 0.02) (0.02 0 0.02) (0.02 0.02 0.02) ); blocks ( hex (0 1 2 3 0 5 6 3) (200 200 200) simpleGrading (1 1 1) ); boundary ( front { type wedge; faces ( (0 5 6 3) ); } back { type wedge; faces ( (0 3 2 1) ); } walls { type wall; faces ( (3 3 6 2) (2 6 5 1) (1 5 0 0) ); } left { type empty; faces ( (0 0 3 3) ); } );
0文件里面的alpha.water是这样设置的:
dimensions [0 0 0 0 0 0 0]; internalField uniform 0; boundaryField { back { type wedge; } front { $back; } walls { type zeroGradient; } defaultFaces { type empty; } left { type empty; } }
但是出现了这样的错误
大佬们帮我看看错误怎么解决,还有0文件里的alpha.water设置的对不对! -
@韬智tz 你的blockMeshDict编写有问题,可以参考这个
https://openfoamwiki.net/index.php/Main_ContribExamples/AxiSymmetric
或者你可以用blockMesh先生成三维的,再借助MakeAxialMesh工具转换成楔形网格:
https://openfoamwiki.net/index.php/Contrib/MakeAxialMesh -
@xuhuashi 谢谢大佬!5°的楔形体弄出来了,那在这个计算域中怎么设置气泡场呢?我的blockMeshDict里面是这样的
convertToMeters 1; vertices ( (0 0 0) (0.023725 0.001035 0) (0.023725 0.001035 0.03) (0 0 0.03) (0.023725 -0.001035 0) (0.023725 -0.001035 0.03) ); blocks ( hex (0 4 1 0 3 5 2 3) (19 1 300) simpleGrading (1 1 1) ); edges ( ); boundary ( front { type wedge; faces ( (0 1 2 3) ); } back { type wedge; faces ( (0 3 5 4) ); } walls { type wall; faces ( (1 4 5 2) (0 4 1 0) (3 5 2 3) ); } axis { type empty; faces ( (0 3 3 0) ); } ); mergePatchPairs ( );
setFieldsDict里面是这样的
defaultFieldValues ( volScalarFieldValue alpha.water 1 volScalarFieldValue p_rgh 1e5 volScalarFieldValue p 1e5 volScalarFieldValue T 300 ); regions ( sphereToCell { centre (0 0 0.015); radius 0.005; fieldValues ( volScalarFieldValue alpha.water 0 volScalarFieldValue p_rgh 1e6 volScalarFieldValue p 1e6 volScalarFieldValue T 578 ); } sphereToCell { centre (0 0 0.03); radius 0.005; fieldValues ( volScalarFieldValue alpha.water 0 volScalarFieldValue p_rgh 1e6 volScalarFieldValue p 1e volScalarFieldValue T 578 ); } boxToCell { box (0 0 0.03) (0.03 0.03 0.06); fieldValues ( volScalarFieldValue alpha.water 1 ); } );
但是后处理中alpha.water图
用contour截的图alpha.water 0.5的图是这样
。
这里没有气泡的形状了都,不知道哪儿错了,请大佬指点一下! -
@韬智tz 你的x方向网格太少了,需要加密一下。
-
@xuhuashi 这个阵列成一个三维的功能太好了,终于找到了
-
@xuhuashi 大佬加密了网格,设置的气泡场形状可以了,但是用compressibleInterFoam算完之后出现了两个问题:
1.出现如图片所示的错误
2.就是算完之后没什么效果,就是气泡形状都没有变化。给您看下0文件里面的alpha.water文件怎么设置的,看下哪里设置错误了。dimensions [0 0 0 0 0 0 0]; internalField uniform 0; boundaryField { back { type wedge; } front { $back; } walls { type zeroGradient; } axis { type empty; } }
-
@韬智tz 1. 浮点数溢出导致发散了。发散的问题可能有很多,比如网格质量不好,比如某个变量计算变化太大(例如负压负温)。你可以试试减小松弛因子,或者先用低阶的离散格式试试,或者给个合适一点的初始参数。
2.气泡初始压力大于周围流体压力才会膨胀,你看看是不是气泡初始条件給错了,或者是不是气泡还没开始变化就已经发散了。 -
@xuhuashi 谢谢指点,我试试大佬的解决办法。
-
@xuhuashi 按您的解决办法我加密了网格(直接在blockMeshDict调x,z方向的网格数),没有解决。
松弛因子的话,我这个算例是OF自带的,fvSolution里面并没有设置relaxationFactor,是要在fvSolution里面加上松弛因子吗,我看tut里compressibleInterFoam那一类里面都设置为relaxationFactors { equations { ".*" 1; } }
这个我不确定,所以问问您。
由于是自带算例,离散格式是这样的,我也没改,您看怎么改能解决发散的问题呢。ddtSchemes { default Euler; } gradSchemes { default Gauss linear; } divSchemes { div(phi,alpha) Gauss interfaceCompression vanLeer 1; div(rhoPhi,U) Gauss upwind; div(rhoPhi,T) Gauss upwind; div(rhoPhi,K) Gauss upwind; div(phi,p) Gauss upwind; div(phi,k) Gauss upwind; div(((thermo:rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes { default Gauss linear uncorrected; } interpolationSchemes { default linear; } snGradSchemes { default uncorrected; }
-
@xuhuashi 我加了这个,结果能算,不指定α和α=1不是一样的效果吗?为什么能算了呀
relaxationFactors { equations { ".*" 1; } }
加了这个能算,但是结果还是气泡没有变化,我的初始压力是大于周围流体的,之后又加大了两倍,也没用。
-
@韬智tz 要不咱私聊吧,qq:1144231085
-
-
@yu_tian 你也来了 老哥 咱俩又见面了 之前这玩意查了好久 一直不知道咋整
-
@prometheus10 你的ID让我想起了普罗米修斯
-
@李东岳 东岳老师好~
是的 我以前添加您微信的时候 ID也叫这个 -
@xuhuashi 谢谢大佬指点,还想问下,楔形网格在指定区域加密用topoSet里面的source是用cylinderToCell,还是其他的呀。我这里用的cylinderToCell,但是出现下面的错误,请大佬看下!
-
@韬智tz 你好!韬智tz
我用boxToCell 能加密成功
不妨一试:actions ( { name c2; type cellSet; action new; source boxToCell; box (0 -0.01 0) (0.002 0.01 0.0075); } );
-
@prometheus10 谢谢,把区域选好了就直接在终端里输入topoSet,是吧,不用其他的操作了吧
-
@prometheus10 你好,用box加密成功了,也能算了,但是结果中出现这种啮齿状的:
这样太丑了,我觉得是网格问题,所以在同一个区域有加密了一次,出现了这样的网格:
这里请教大佬两个问题:1.这种啮齿状是不是网格的问题。2.加密两次出现这种网格,怎么让他更好看。 -
@韬智tz
你好!韬智tz
在判断问题点之前,先咨询一下:你的命令顺序是怎么样的?
是不是每次直接就接着做了refineMesh?
还有加密的方向对不对?
如果方便的话 给看一下代码和命令行 -
@prometheus10 就是先blockMesh,topoSet,两次refineMesh,然后setfields,之后就并行算了用的compressibleInterFoam。
topoSetDict如下
actions ( { name c0; type cellSet; action new; source boxToCell; sourceInfo { box (0 -0.015 0.008) (0.005 0.015 0.015); } } );
refineMeshDict如下
set c0; coordinateSystem global; globalCoeffs { e1 (1 0 0); e2 (0 1 0); e3 (0 0 1); } directions (e1 e3); useHexTopology yes; geometricCut no; writeMesh no;
-
@韬智tz
我手里有个现成的一个topsetDict,具体的各行作用暂时回答不上,要不你先试一下:set c0; coordinateSystem global; globalCoeffs { tan1 ( 1 0 0 ); tan2 ( 0 1 0 ); } patchLocalCoeffs { patch outside; // Normal direction is facenormal of zero'th face of patch tan1 (1 0 0); tan1 (0 0 1); } directions ( tan1 normal ); useHexTopology yes; geometricCut no; writeMesh no;
-
@prometheus10 好,谢谢