CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

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

    OpenFOAM
    3
    9
    1261
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • walten
      walten 最后由 编辑

      大家好,我需要植入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中的数据的正确定义、调用的方式,请问有什么资料可以学习,谢谢

      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

        Scalar应该是小写scalar?

        线上CFD课程开始报名:http://www.dyfluid.com/class.html

        CFD高性能服务器 http://dyfluid.com/servers.html

        1 条回复 最后回复 回复 引用
        • 李东岳
          李东岳 管理员 最后由 编辑

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

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

          线上CFD课程开始报名:http://www.dyfluid.com/class.html

          CFD高性能服务器 http://dyfluid.com/servers.html

          walten I 2 条回复 最后回复 回复 引用
          • walten
            walten @李东岳 最后由 李东岳 编辑

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

            1 条回复 最后回复 回复 引用
            • 李东岳
              李东岳 管理员 最后由 编辑

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

              线上CFD课程开始报名:http://www.dyfluid.com/class.html

              CFD高性能服务器 http://dyfluid.com/servers.html

              1 条回复 最后回复 回复 引用
              • I
                IO-Turbulent @李东岳 最后由 编辑

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

                I 1 条回复 最后回复 回复 引用
                • I
                  IO-Turbulent @IO-Turbulent 最后由 编辑

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

                  1 条回复 最后回复 回复 引用
                  • 李东岳
                    李东岳 管理员 最后由 编辑

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

                    线上CFD课程开始报名:http://www.dyfluid.com/class.html

                    CFD高性能服务器 http://dyfluid.com/servers.html

                    1 条回复 最后回复 回复 引用
                    • I
                      IO-Turbulent 最后由 编辑

                      回来填下坑
                      为了在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
                      

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

                      1 条回复 最后回复 回复 引用
                      • First post
                        Last post