第二个方案的源是在CFD中文网上看到的一篇帖子,其具体链接忘了。这个帖子给了一个github的链接,就是将OpenFOAM输出的颗粒位置信息转变为真实的位置信息的脚本。其链接在此。
1. 背景
我们知道,paraview之所以打不开OF输出的颗粒文件,是因为OF输出的颗粒信息的位置文件中的内容并不是真实的颗粒坐标。
而上面那个脚本就是将这个坐标转换为真实的位置坐标。
2. 具体步骤
GitHub链接里其实给的比较清楚了,说明文件写的十分良心。
主要有两种方法,一是边算边转换,而是算完之后统一转换。
说明文件中以MPPICFoam下的一个案例文件作为说明
cp -r $FOAM_TUTORIALS/lagrangian/MPPICFoam/column MPPICFoam_column
cd MPPICFoam_column
第一种方式
1、在system/controlDic文件的最后添加
functions
{writeCloudOldStyle1{type writeCloudOldStyle;libs ("liblagrangianExtraFunctionObjects.so");writeControl writeTime;clouds(kinematicCloud);}
}
2、运行算例
3、执行命令
find -name positions | while read line; do mv $line $line.coord; mv $line.orig $line; done
find -name positions | while read line; do sed -i -e 's=^\(.*object.*\)positions.orig;=\1positions;=' $line; done
之后就能用paraview成功打开文件进行查看了。
第二种方式
第二种方式是再计算完成之后进行。
1、需要在`system文件夹下创建一个positionConvertDict文件。
/*--------------------------------*- C++ -*----------------------------------*\| ========= | || \\ / F ield | OpenFOAM: The Open Source CFD Toolbox || \\ / O peration | Version: 5.x || \\ / A nd | Web: www.OpenFOAM.org || \\/ M anipulation | |\*---------------------------------------------------------------------------*/FoamFile{version 2.0;format ascii;class dictionary;location "system";object positionConvertDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //functions{writeCloudOldStyle1{type writeCloudOldStyle;libs ("liblagrangianExtraFunctionObjects.so");writeControl writeTime;clouds(kinematicCloud);}}
2、执行命令
MPPICFoam -postProcess -dict system/positionConvertDict
这里的命令也可以换成DPMFoam开头,对于自己整的求解器可能会显示没有该命令的情况,但是可以把自己求解器的文件格式改成DPMFoam一样,在用DPMFoam命令转换,亲测有效。
3、执行命令
find -name positions | while read line; do mv $line $line.coord; mv $line.orig $line; done
find -name positions | while read line; do sed -i -e 's=^\(.*object.*\)positions.orig;=\1positions;=' $line; done
bug
这两个方法在并行计算时会存在一点小bug,因为他这个流程是我先生成一个真实颗粒位置的文件positions.org(再合并后的文件夹里),然后再把原始的颗粒位置文件(paraview无法识别的)的内容替换成positions.org。第三步的命令就是这个操作会检索所有可能的position名称的文件,但是在proc文件中并不会出现positions.org,因此会报错。
解决办法是把proc文件给删掉,然后再执行第三部命令