拉格朗日一个bug
-
/*--------------------------------*- 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 Cloud<basicKinematicParcel>; location "1/lagrangian/kinematicCloud"; object positions; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 2 ( (2.220446049e-15 0.5 2.264460241e-20 0.5) 3 2 2//???不是矢量 (2.442490654e-15 0.5 0.5 1.748381882e-17) 4 3 1//???不是矢量 )
Cloud<basicKinematicParcel>
这个的position()
没写对。
-
上述代码为OpenFOAM-5.x下的结果,经测试OpenFOAM-4.x结果正确。拉格朗日这面玩的这么少么?不仅是
Cloud<basicKinematicParcel>
,Cloud<basicKinematicCollidingParcel>
也有这个问题。4.x:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 4.x | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class Cloud<basicKinematicCollidingParcel>; location "5/lagrangian/kinematicCloud"; object positions; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 850 ( (0.1652375049 0.5 0.5) 0 (0.3082808448 0.5 0.5) 0 (0.09319717789 0.5 0.5) 0 (0.1760049582 0.5 0.5) 0 (0.1925717587 0.5 0.5) 0 (0.3543820922 0.5 0.5) 0
5.x:
/*--------------------------------*- 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 Cloud<basicKinematicCollidingParcel>; location "5/lagrangian/kinematicCloud"; object positions; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 850 ( (0.3261957614 0.3369021193 0.3369021193 0) 0 9 2//什么东西这是?。。 (0.4001988533 0.2999005734 0.2999005734 0) 0 9 2 (0.1530216921 0.4234891539 0.4234891539 0) 0 9 2 (0.3338597466 0.3330701267 0.3330701267 0) 0 9 2 (0.3488235028 0.3255882486 0.3255882486 0) 0 9 2 (0.4730656805 0.2634671597 0.2634671597 0) 0 9 2 (0.2571585867 0.3714207066 0.3714207066 0) 0 9 2 (0.4849837396 0.2575081302 0.2575081302 0) 0 9 2 (0.1467023563 0.4266488218 0.4266488218 0) 0 9 2 (0.2706319485 0.3646840257 0.3646840257 0) 0 9 2 (0.3640142443 0.3179928778 0.3179928778 0) 0 9 2 (0.2279260728 0.3860369636 0.3860369636 0) 0 9 2
-
这个跟颗粒追踪算法的更新有关吧,在 Openfoam 5.0 的发布说明里有提到(OpenFOAM Barycentric Tracking),更新之后颗粒输出的格式与之前版本不兼容。
在
$FOAM_SRC/lagrangian/basic/particle/particleIO.C
中可以看到保存颗粒位置信息时的区别(writePosition
函数):之前版本中为
os << position_ << token::SPACE << celli_;
在 5.0 版中为
os << coordinates_ << token::SPACE << celli_ << token::SPACE << tetFacei_ << token::SPACE << tetPti_;
变量的定义在
$FOAM_SRC/lagrangian/basic/particle/particle.H
中可以找到。
-
有道理!确实输出的是
os << coordinates_ << token::SPACE << celli_ << token::SPACE << tetFacei_ << token::SPACE << tetPti_;
5.x下面怎么后处理呢?paraview提示
ERROR: In /home/buildslave/dashboards/buildbot/paraview-pvbinsdash-linux-shared-release_superbuild/build/superbuild/paraview/src/VTK/IO/Geometry/vtkOpenFOAMReader.cxx, line 8285 vtkOpenFOAMReaderPrivate (0x5e89d60): Error reading line 20 of /home/dyfluid/OpenFOAM_tutorials/5.x/lagrangian/DPMFoam/Goldschmidt/0.01/lagrangian/kinematicCloud/positions: Expected punctuation token ')', found 0
我看5.0把
position
位置矢量写到obj文件里面去了
-
um, 看来得学习学习barycentric坐标这个玩意
-
@李东岳 我这里后处理可以用
paraFoam
,也可以先运行foamToVTK
后用paraview
。 没见过这个错误,可能是因为我编译 OpenFOAM 时顺便编译了 paraview ?
-
嗯,有可能,我没编译
paraFoam
,用的是paraview
。
-
5.X用了粒子所在剖分四面体内的权重作为局部坐标,这样省去了很多计算量,但是对后处理不友好了,因为之前一直都是输出的全局坐标。
-
请问有好的方式处理这个问题吗?
-
@浪迹天大 今天遇到了这个问题,解决方法就是楼上说的,用paraFoam 打开
-
@Yufeng-Wei 要么改用基金会版本,基金会版本专门做了优化,自动把质心坐标转化为三维坐标,要么试一试这个https://github.com/blueCFD/lagrangianExtraFunctionObjects
-
我也遇到了这个问题,查了一圈~发现FoamToVTK比较好使,可以输出保存颗粒数据,但是一定注意scv文件不要用excel打开,否则会自动删减数据!(这是什么神奇的操作不清楚)