解决OpenFOAM颗粒计算输出文件Paraview无法打开问题(二)

第二个方案的源是在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
文件给删掉,然后再执行第三部命令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值