OpenFORM植入EMMS模型时函数变量不匹配的问题



  • 大家好,我需要植入EMMS模型到multiEulerFoam中,其中Hd的系数需要针对液相体积分数的不同而有所改变,因此我需要写入一个分段函数到Scalar.H文件中,函数是这样写的

    inline Scalar between(const Scalar s1, const Scalar s2)
    {
          return (s1>0 &&  s2<=0) ?1:0;
    }
    

    但是我在编译的时候调用between函数会出现数据类型不对的错误
    Screenshot from 2020-10-28 13-59-09.png
    我想知道应该如何定义才能定义出符合需求的数据类型。
    另外,我想详细了解openfoam中src/OpenFOAM/primitives中的数据的正确定义、调用的方式,请问有什么资料可以学习,谢谢



  • Scalar应该是小写scalar?



  • 我试了一下,你加到了Scalar.H里面,这个编译通过了。

    你为何不在求解器顶层植入?



  • @东岳 我这就让他去试试 @IO-Turbulent



  • Scalar.H这个太底层了,编译要好久



  • @东岳 因为我想添加一个能够使用多段液相分布的函数,所以在底层添加了,添加之后编译是可以通过,但是我在调用的时候编译就出现问题。
    下面是我需要调用时的文件57865962-e0e2-434e-b5ea-115b7c0aaf27-image.png
    就是在这个曳力编译的时候出现的数据类型错误



  • @IO-Turbulent 补充一下错误截图Screenshot from 2020-10-28 15-10-01.png



  • alpha是场,你需要个forAll循环试试?
    between(alpha[C] - 0.04, xxx);



  • 回来填下坑
    为了在dragModels中引入一个新的区间判断函数between(),除了需要在

    \src\OpenFOAM\primitives\Scalar\Scalar.H
    

    中定义函数主题,还需要将函数进行重载,这是因为写入Scalar.H的文件只是单纯意义上的scalar类型,并不是计算所需要的

    Foam::tmp<Foam::GeometricField<double, Foam::FvPatchField, Foam::volMesh
    

    类型,为了使函数返回的类型符合所需数据类型需要对函数进行重载操作,具体操作的方法是在下列地方写入重载的定义,分别是

    \src\OpenFOAM\dimensionedTypes\dimensionedType.H
    \src\OpenFOAM\dimensionedTypes\dimensionedScalar.H
    \src\OpenFOAM\dimensionedSet\dimensionedSet.H
    \src\OpenFOAM\fields\DimensionedFields\DimensionedFieldFunctions.H
    \src\OpenFOAM\fields\FieldFields\scalarFieldField.H
    \src\OpenFOAM\fields\GeometricFields\GeometricField\GeometricFieldsFunctions.H
    \src\OpenFOAM\fields\GeometricFields\GeometricScalarField\GeometricScalarField.H
    

    重载之后可以使between()函数返回的数值类型为

    Foam::tmp<Foam::GeometricField<double, Foam::FvPatchField, Foam::volMesh
    

    之后重新编辑一下就可以运行了


Log in to reply