CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    CollidingCloud构造函数后面的 CloudType()是什么?

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

      各位老师好,本人在学习C++和研读拉格朗日库中的CollidingCloud.C时,发现构造函数定义如下:

      Foam::CollidingCloud<CloudType>::CollidingCloud
       (
           const word& cloudName,
           const volScalarField& rho,
           const volVectorField& U,
           const volScalarField& mu,
           const dimensionedVector& g,
           bool readFields
       )
       :
           CloudType(cloudName, rho, U, mu, g, false),
          ...
      

      在CollidingCloud.H中发现,CloudType是CollidingCloud的一个基类,此处冒号后的CloudType()是不是CloudType类的构造函数呢?然而我并没有找到CloudType类的定义及其构造函数,还望大佬帮忙解释一下

      1 条回复 最后回复 回复 引用
      • bestucan
        bestucan 版主 副教授 最后由 编辑

        冒号是用于初始化的,可以搜到相关解释

        https://www.cnblogs.com/Allen-rg/p/11529949.html

        https://www.baidu.com/s?wd=c%2B%2B函数后的冒号

        滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

        异步沟通方式(《posting style》from wiki)(下载后打开):
        https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
        提问的智慧(github在gitee的镜像):
        https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

        J 1 条回复 最后回复 回复 引用
        • J
          Jasper 0 @bestucan 最后由 编辑

          @bestucan 谢谢大佬,我知道冒号是初始化的意思,我想问的是这个CloudType是什么?是不是就是指的kinematicCloud?因为CollidingCloud是由kinematicCloud继承来的

          bestucan 1 条回复 最后回复 回复 引用
          • bestucan
            bestucan 版主 副教授 @Jasper 0 最后由 bestucan 编辑

            @jasper-0
            第75行是定义
            https://www.openfoam.com/documentation/guides/v2112/api/CollidingCloud_8H_source.html
            点那个类型有更详细的定义

            Untitled.png

            这是类型关系图
            https://www.openfoam.com/documentation/guides/v2112/api/classFoam_1_1CollidingCloud.html

            滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

            异步沟通方式(《posting style》from wiki)(下载后打开):
            https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
            提问的智慧(github在gitee的镜像):
            https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

            J 2 条回复 最后回复 回复 引用
            • J
              Jasper 0 @bestucan 最后由 编辑

              @bestucan 好的谢谢您,我去看一下

              1 条回复 最后回复 回复 引用
              • J
                Jasper 0 @bestucan 最后由 编辑

                @bestucan 老师您好,我想请教一下kinematicCloud.H 里面的274行

                template<class TrackCloudType>
                             void solve
                             (
                                 TrackCloudType& cloud,
                                 typename parcelType::trackingData& td
                             );
                

                TrackCloudType& cloud,里面的cloud是在cloud.H里面定义的类,但是在kinematicCloud.C 里面的140行直接调用了kinematicCloud类的成员函数cloud.preEvolve(td)。这是为什么呢?还是说这里的cloud指的就是kinematicCloud?

                bestucan 1 条回复 最后回复 回复 引用
                • bestucan
                  bestucan 版主 副教授 @Jasper 0 最后由 编辑

                  @jasper-0

                  这个 cloud 是一个 TrackCloudType 类的引用,

                  这个 TrackCloudType 具体是什么,看调用 solve 函数的时候这里填的是什么类的引用,

                  用 preEolve 没法判断,因为这是个模板函数,符合模板的类八成有共同的机构,要不编译也过不去。就是说,不只 kinematicCloud 有 preEvolve 这个函数。

                  但是在kinematicCloud.C 里面的140行直接调用了kinematicCloud类的成员函数cloud.preEvolve(td)。

                  cloud.preEvolve(td) 不是 kinematicCloud 的成员函数。

                  cloud 是 TrackCloudType& 类型的变量,具体 TrackCloudType 取决于调用。

                  preEvolve 是 cloud 的成员函数

                  要想通过 preEolve 判断 cloud 的可能类型,可以直接搜这个函数
                  Untitled.png

                  或者看调用 solve 的时候,第一个参数填的具体是什么

                  滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

                  异步沟通方式(《posting style》from wiki)(下载后打开):
                  https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
                  提问的智慧(github在gitee的镜像):
                  https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

                  J 2 条回复 最后回复 回复 引用
                  • J
                    Jasper 0 @bestucan 最后由 编辑

                    @bestucan 感谢大佬的解答,非常详细。我主要的问题也是没有看到有模板参数的函数是在哪里调用的?例如solve函数的调用。我用的是DPMFoam,在DPMFoam.C里也没有看到调用,如果能看到调用函数就能知道TrackCloudType指的是什么了。大佬能否指点一下去哪里看solve函数的调用呢?

                    bestucan 1 条回复 最后回复 回复 引用
                    • J
                      Jasper 0 @bestucan 最后由 编辑

                      @bestucan 刚看了一下CollidingCloud.C,引用了solve函数:

                      template<class CloudType>
                       void Foam::CollidingCloud<CloudType>::evolve()
                       {
                           if (this->solution().canEvolve())
                           {
                               typename parcelType::trackingData td(*this);
                        
                               this->solve(*this, td);
                           }
                       }
                      

                      我个人的理解是,这里的*this指针指的就是CollidingCloud,因此cloud.preEvolve就是CollidingCloud.preEvolve, 而preEvolve是KinematicCloud的public的成员函数,CollidingCloud是其衍生类,因此可以直接调用了preEvolve函数

                      1 条回复 最后回复 回复 引用
                      • bestucan
                        bestucan 版主 副教授 @Jasper 0 最后由 编辑

                        @jasper-0

                        这个命令可以在文件夹里搜多个文件

                        grep -r 'solve' . 
                        

                        滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

                        异步沟通方式(《posting style》from wiki)(下载后打开):
                        https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
                        提问的智慧(github在gitee的镜像):
                        https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

                        J 1 条回复 最后回复 回复 引用
                        • J
                          Jasper 0 @bestucan 最后由 编辑

                          @bestucan 好的,非常感谢大佬的指点!

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