CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    请教:第三代涡识别方法Liutex的代码在linux中运行的问题

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

      在浪潮上将liutex程序编译成了一个独立的程序,然后发现算的很慢,256³的网格算了半个月都没有算出一个时间步文件!
      请问哪位大佬能帮我指出问题或者有什么可以并行的方法?

      这是代码的下载地址:http://www.jhydrodynamics.com/en/download-of-liutex-code/

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

        真耐心啊,半个月了还能等:jingya:

        万一程序卡死了呢?或者进死循环了。

        如果需要的时间步文件很大,也可以用小时间步写出来,后面删着很快的。出时间步好歹说明正常运行了。这一个时间步都没有,就不是是跑的慢还是没跑了。

        如果时间步是这样的

        0.01 0.011 0.012 0.013 ……
        

        或者这样的

        0.010 0.011 0.012 0.013 ……
        

        那就这样

        mkdir result
        mv 0.0? result
        

        或者这样

        mkdir result
        mv 0.0?0 result
        

        通配符?只匹配一个未知字符,不像*那样。很适合用来给文件分类。
        然后把 result 带走,剩下的删了。写的密集断点续算也方便。

        滚来滚去……~(~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

        yfleung 李东岳 2 条回复 最后回复 回复 引用
        • 小
          小张同学 最后由 编辑

          有没有试着用那个fluent的呀

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

            @yfleung 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:

            然后发现算的很慢,256³的网格算了半个月都没有算出一个时间步文件!

            这只是一个后处理程序,我这面3300万网格,算出来了Q应该在分钟级别,你那面是不是操作不对。

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

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

            yfleung 1 条回复 最后回复 回复 引用
            • yfleung
              yfleung @李东岳 最后由 编辑

              @东岳 我检查了一下,程序可以并行了。程序应该是没有问题的。我算了一个64³网格的,大概15s出一个文件夹的数据。但是256³的算了一天还是没有出一个。我发现我并行之后只有一个结点是有负载的,其他好像没有起作用?想请教一下,有人知道可能原因吗?fff.png

              1 条回复 最后回复 回复 引用
              • yfleung
                yfleung @bestucan 最后由 编辑

                @bestucan 谢谢,应该不是程序的问题。现在可以并行了,但是发现并行之后好像只有一个结点起作用的。:143: fff.png

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

                  @yfleung 呃,那就看看$64^3$网格的时候用几个节点呀。一个节点基本就是一个主机了。大机器不是很重的任务分一个节点也差不多了。

                  看64分到几个节点,如果也是一个呢。

                  调试阶段还是时间步越小越好。确定正常工作了再调大:xiezuoye:

                  滚来滚去……~(~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

                  1 条回复 最后回复 回复 引用
                  • 荷
                    荷兰后腰阿贾克斯 最后由 编辑

                    @yfleung 请问是编译完成了把exe拷贝到case目录下直接运行就可以吗?不知道是不是版本太新了ReadingU之后直接崩溃了(Uheader已经改过来了)
                    r.png

                    五好青年 1 条回复 最后回复 回复 引用
                    • 五好青年
                      五好青年 @荷兰后腰阿贾克斯 最后由 编辑

                      @荷兰后腰阿贾克斯 exe拷贝到case目录下直接运行???

                      I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                      1 条回复 最后回复 回复 引用
                      • 五好青年
                        五好青年 最后由 编辑

                        您好,请问怎么解决的呢?
                        我用Liutex后处理1万网格,大概20s出一个时间序列文件夹。
                        处理400万网格,2天了一个时间结果都没出来,一直在下面的界面,我用3台电脑同时尝试,结果都是这样。
                        请问楼主怎么解决的呢
                        af724fdd-7fab-41b4-9182-39aebe07c4fb-image.png

                        I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                        李东岳 1 条回复 最后回复 回复 引用
                        • 李东岳
                          李东岳 管理员 @五好青年 最后由 编辑

                          应该是算法上本身在处理某种计算 看看公式 看看那部分处理比较耗时间

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

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

                          五好青年 2 条回复 最后回复 回复 引用
                          • 五好青年
                            五好青年 @李东岳 最后由 编辑

                            @yfleung @荷兰后腰阿贾克斯 @波流力
                            请问你们的Liutex,后处理一个时间文件夹,大概多久呢?

                            I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                            1 条回复 最后回复 回复 引用
                            • 五好青年
                              五好青年 @李东岳 最后由 编辑

                              @李东岳
                              但是别人文献说,这个就是个后处理。计算速度和使用方法类似OpenFOAM自带的Q和Vorticity。
                              但是目前网上开源的那个代码,就是遇到网格50万以上,运行2天没反应。
                              东岳老师,能帮忙看下代码,提示下可能是代码哪里问题吗?
                              感谢!

                              I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                              李东岳 1 条回复 最后回复 回复 引用
                              • 李东岳
                                李东岳 管理员 @五好青年 最后由 编辑

                                @五好青年 http://www.jhydrodynamics.com/en/download-of-liutex-code/

                                是这个代码么?我对liutex的计算方法不熟悉。但肯定是代码里面什么地方某个算法卡住了。

                                1. 这种期刊的代码可以直接找通讯作者交流类似的技术问题。

                                2. https://www.cfd-china.com/topic/3499 在这里面有一个获取某个函数的计算时间,你可以放在代码里面看看哪里的计算时间比较长,卡在哪里了。

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

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

                                五好青年 1 条回复 最后回复 回复 引用
                                • 五好青年
                                  五好青年 @李东岳 最后由 编辑

                                  @李东岳 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:

                                  计算时间

                                  谢谢东岳老师

                                  I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                  李东岳 1 条回复 最后回复 回复 引用
                                  • 李东岳
                                    李东岳 管理员 @五好青年 最后由 编辑

                                    @五好青年 我把这个帖子发到刘老师那面有个群里面去了,但目前没啥反馈。你这面有啥结果,告诉我。搞不定的话,我给你调试。

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

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

                                    五好青年 1 条回复 最后回复 回复 引用
                                    • 五好青年
                                      五好青年 @李东岳 最后由 编辑

                                      @李东岳
                                      目前我将cavity算例改成三维,三个方向网格相同,试算了后进行Liutex后处理。记录如下:
                                      30^3网格 单核,Liutex处理时间:4s
                                      35^3网格 单核,Liutex处理时间:14s
                                      40^3网格 单核,Liutex处理时间:60s
                                      45^3网格 单核,单核,Liutex处理时间:131s
                                      50^3网格 Liutex处理时间:327s
                                      55^3网格 单核,浮点溢出
                                      58^3网格 单核,浮点溢出
                                      60^3网格 单核,浮点溢出
                                      70^3网格 单核,浮点溢出
                                      80^3网格 4核并行后处理,报错

                                      300万网格以前的算例,扩大机器内存,单核处理3天了,还没出结果

                                      I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                      李东岳 1 条回复 最后回复 回复 引用
                                      • 李东岳
                                        李东岳 管理员 @五好青年 最后由 李东岳 编辑

                                        @五好青年

                                        #include <chrono>
                                        
                                        auto start = std::chrono::steady_clock::now();                                                   
                                        // Functions here
                                        auto end = std::chrono::steady_clock::now();                                                     
                                        auto diff = end - start;
                                        Info<< "Calculation using " 
                                            << std::chrono::duration <double, std::milli> (diff).count()                                 
                                            << " ms" << endl;
                                        

                                        你可以用上段代码测试哪个函数运行时间比较长

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

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

                                        1 条回复 最后回复 回复 引用
                                        • yhdthu
                                          yhdthu 讲师 @yfleung 最后由 编辑

                                          @yfleung jhd上的代码有bug,且效率低,我自己重写可用。
                                          https://cloud.tsinghua.edu.cn/d/05b0149e37904e7ca61c/

                                          长风破浪会有时,直挂云帆济沧海

                                          五好青年 李东岳 C 4 条回复 最后回复 回复 引用
                                          • 五好青年
                                            五好青年 @yhdthu 最后由 编辑

                                            @yhdthu
                                            谢谢海东博士,请问您这个是在OpenFOAM的哪个版本实现的呢?

                                            I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                            五好青年 1 条回复 最后回复 回复 引用
                                            • 五好青年
                                              五好青年 @五好青年 最后由 编辑

                                              已测试,OpenFOAM-2006以上版本
                                              感谢

                                              I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                              1 条回复 最后回复 回复 引用
                                              • 五好青年
                                                五好青年 @yhdthu 最后由 编辑

                                                @yhdthu
                                                您好
                                                我尝试往OF官网版本上移植,提示了一些报错,主要有:error: ‘complex’ was not declared in this scope
                                                经过很久的折腾,发现您可能参考tensor.C文件来修改的,并且我对比了OpenFOAM低版本的tensor.C来逐个修改报错,但是始终没能解决。
                                                可否帮忙帮忙编一个低版本的,或者给一些修改的思路
                                                感谢

                                                dyfluid@dyfluid:~/postVersion$ wclean
                                                dyfluid@dyfluid:~/postVersion$ wmake
                                                Making dependency list for source file Liutex.C
                                                SOURCE=Liutex.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3  -DNoRepository -ftemplate-depth-100 -I/home/dyfluid/OpenFOAM/OpenFOAM-2.4.x/src/finiteVolume/lnInclude -I/home/dyfluid/OpenFOAM/OpenFOAM-2.4.x/src/meshTools/lnInclude -IlnInclude -I. -I/home/dyfluid/OpenFOAM/OpenFOAM-2.4.x/src/OpenFOAM/lnInclude -I/home/dyfluid/OpenFOAM/OpenFOAM-2.4.x/src/OSspecific/POSIX/lnInclude   -fPIC -c $SOURCE -o Make/linux64GccDPOpt/Liutex.o
                                                Liutex.C: In function ‘Foam::vector getZdEVec(const tensor&)’:
                                                Liutex.C:44:18: error: ‘complex’ was not declared in this scope
                                                     const Vector<complex> EVals(eigenValues(T));
                                                                  ^
                                                Liutex.C:44:25: error: template argument 1 is invalid
                                                     const Vector<complex> EVals(eigenValues(T));
                                                                         ^
                                                Liutex.C:44:47: error: cannot convert ‘Foam::vector {aka Foam::Vector<double>}’ to ‘const int’ in initialization
                                                     const Vector<complex> EVals(eigenValues(T));
                                                                                               ^
                                                Liutex.C:46:25: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Cmpt> class Foam::Vector’
                                                     const Vector<complex> standardBasis1(Zero, pTraits<complex>::one, Zero);
                                                                         ^
                                                Liutex.C:46:25: note:   expected a type, got ‘complex’
                                                Liutex.C:46:42: error: ‘Zero’ was not declared in this scope
                                                     const Vector<complex> standardBasis1(Zero, pTraits<complex>::one, Zero);
                                                                                          ^
                                                Liutex.C:46:63: error: type/value mismatch at argument 1 in template parameter list for ‘template<class PrimitiveType> class Foam::pTraits’
                                                     const Vector<complex> standardBasis1(Zero, pTraits<complex>::one, Zero);
                                                                                                               ^
                                                Liutex.C:46:63: note:   expected a type, got ‘complex’
                                                Liutex.C:46:75: error: expression list treated as compound expression in initializer [-fpermissive]
                                                     const Vector<complex> standardBasis1(Zero, pTraits<complex>::one, Zero);
                                                                                                                           ^
                                                Liutex.C:47:25: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Cmpt> class Foam::Vector’
                                                     const Vector<complex> standardBasis2(Zero, Zero, pTraits<complex>::one);
                                                                         ^
                                                Liutex.C:47:25: note:   expected a type, got ‘complex’
                                                Liutex.C:47:69: error: type/value mismatch at argument 1 in template parameter list for ‘template<class PrimitiveType> class Foam::pTraits’
                                                     const Vector<complex> standardBasis2(Zero, Zero, pTraits<complex>::one);
                                                                                                                     ^
                                                Liutex.C:47:69: note:   expected a type, got ‘complex’
                                                Liutex.C:47:75: error: expression list treated as compound expression in initializer [-fpermissive]
                                                     const Vector<complex> standardBasis2(Zero, Zero, pTraits<complex>::one);
                                                                                                                           ^
                                                Liutex.C:48:25: error: type/value mismatch at argument 1 in template parameter list for ‘template<class Cmpt> class Foam::Vector’
                                                     const Vector<complex> EVec
                                                                         ^
                                                Liutex.C:48:25: note:   expected a type, got ‘complex’
                                                Liutex.C:50:30: error: request for member ‘x’ in ‘EVals’, which is of non-class type ‘const int’
                                                         eigenVector(T, EVals.x(), standardBasis1, standardBasis2)
                                                                              ^
                                                Liutex.C:53:23: error: request for member ‘x’ in ‘EVec’, which is of non-class type ‘const int’
                                                     vector EVecR(EVec.x().real(), EVec.y().real(), EVec.z().real());
                                                                       ^
                                                Liutex.C:53:40: error: request for member ‘y’ in ‘EVec’, which is of non-class type ‘const int’
                                                     vector EVecR(EVec.x().real(), EVec.y().real(), EVec.z().real());
                                                                                        ^
                                                Liutex.C:53:57: error: request for member ‘z’ in ‘EVec’, which is of non-class type ‘const int’
                                                     vector EVecR(EVec.x().real(), EVec.y().real(), EVec.z().real());
                                                                                                         ^
                                                Liutex.C: In function ‘Foam::tensor rotation(const vector&)’:
                                                Liutex.C:62:14: error: ‘Zero’ was not declared in this scope
                                                     tensor q(Zero); 
                                                              ^
                                                Liutex.C: In function ‘Foam::vector liutex(const tensor&, const vector&)’:
                                                Liutex.C:100:19: error: ‘Zero’ was not declared in this scope
                                                     vector liutex(Zero);
                                                                   ^
                                                Liutex.C: In function ‘int main(int, char**)’:
                                                Liutex.C:156:48: error: ‘Zero’ was not declared in this scope
                                                             dimensionedVector("zero", dimless, Zero)
                                                                                                ^
                                                Liutex.C:158:39: error: ‘Foam::volVectorField {aka class Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>}’ has no member named ‘primitiveFieldRef’
                                                         vectorField& iLiutex = Liutex.primitiveFieldRef();
                                                                                       ^
                                                Liutex.C:174:43: error: ‘Foam::volTensorField {aka class Foam::GeometricField<Foam::Tensor<double>, Foam::fvPatchField, Foam::volMesh>}’ has no member named ‘primitiveField’
                                                         const tensorField& iGradU = gradU.primitiveField();
                                                                                           ^
                                                Liutex.dep:674: recipe for target 'Make/linux64GccDPOpt/Liutex.o' failed
                                                make: *** [Make/linux64GccDPOpt/Liutex.o] Error 1
                                                dyfluid@dyfluid:~/postVersion$ 
                                                
                                                
                                                

                                                I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

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

                                                  @yhdthu 你写的看起来比期刊上的那个neat很多:146:

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

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

                                                  五好青年 1 条回复 最后回复 回复 引用
                                                  • 五好青年
                                                    五好青年 @李东岳 最后由 编辑

                                                    测试了一下这个程序,给大家反馈下

                                                    1. OpenFOAM-v2006以上可用
                                                    2. OpenFOAM-8调试好了,编译没报错,但是处理算例报错
                                                    3. foam-extend4.1上,调试好了,但是不识别浸入边界

                                                    目前只能在高版本上用了,如果谁编译了低版本,记得回来分享下啊

                                                    I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                                    五好青年 尚 2 条回复 最后回复 回复 引用
                                                    • 五好青年
                                                      五好青年 @五好青年 最后由 编辑

                                                      东岳老师,能不能分享一个空的Ubuntu虚拟机出来呢。我记得以前是有的呢,但是找不到啦。
                                                      这样我在空的ubuntu系统上,尝试装一下不同版本,安装完我再反馈提供给您。分享给CFD中文网的Fans

                                                      I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                                      1 条回复 最后回复 回复 引用
                                                      • 尚
                                                        尚善若水 @五好青年 最后由 编辑

                                                        @五好青年 请问老师,后来of8的可用了吗?

                                                        五好青年 1 条回复 最后回复 回复 引用
                                                        • 五好青年
                                                          五好青年 @尚善若水 最后由 编辑

                                                          @尚善若水 可以啦,直接用刘老师的fortran程序

                                                          I am a CFD machine with no emotions. Welcome to browse my Bilibili, search: seeeeeeeeeeer

                                                          尚 2 条回复 最后回复 回复 引用
                                                          • 尚
                                                            尚善若水 @五好青年 最后由 编辑

                                                            @五好青年 好的,我去查下,谢谢。

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

                                                              按道理来说 这个C++跑起来应该没问题啊 为什么后来大佬们都转fortran了呢

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

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

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

                                                                我把 http://www.jhydrodynamics.com/en/download-of-liutex-code/ 这个链接里面的代码,小改了一下,放到了OpenFOAM-9里面可以编译成功。

                                                                下载:Rotex.zip

                                                                我目前来看这个代码是每个网格做了循环,每个循环里面做了大量的操作。因此如果网格越多,确实会越来越慢。这跟其他的变量算起来完全不一样,其他的变量比如Q之类都是在体场层面做操作,这个Rotex从代码上来看,要从cell做循环来操作。

                                                                哪个大佬可以提供个算例,我来测试下。

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

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

                                                                1 条回复 最后回复 回复 引用
                                                                • 尚
                                                                  尚善若水 @五好青年 最后由 编辑

                                                                  @五好青年 再次来打扰下 seeeeeeeeeeer 老师,没 google到 fortran 代码,可以给我贴一个吗?感谢。

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

                                                                    @bestucan 确实,这个大佬竟然等了半个月。。。是不是家里服务器太多了,有一个算例跑起来忘了,半个月之后才想起来,发现还在算Rotex!

                                                                    之前不是说有个土豪车太多了,扔某个车库一个玛莎拉蒂,几年之后才想起来,车上已经一层灰。

                                                                    256³的网格算了半个月都没有算出一个时间步文件!

                                                                    :xiezuoye:

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

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

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

                                                                      @李东岳 佛系计算,不给服务器压力,不push
                                                                      :shangxue:

                                                                      滚来滚去……~(~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

                                                                      李东岳 1 条回复 最后回复 回复 引用
                                                                      • C
                                                                        coolhhh @yhdthu 最后由 编辑

                                                                        @yhdthu 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:

                                                                        @yfleung jhd上的代码有bug,且效率低,我自己重写可用。
                                                                        https://cloud.tsinghua.edu.cn/d/05b0149e37904e7ca61c/

                                                                        你好,这个下载地址已经失效了,能否再提供一下吗,非常感谢

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

                                                                          @bestucan 想当年2021年这个时候,我还在计算LES。3台服务器,每个64核心每个跑一个算例。600万网格也是算了半个月,每个算了1000秒。现在俺手握800核,LES跑的很血腥,3000万网格跑的跟单相流一样。

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

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

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

                                                                            @李东岳 摩尔定律之东岳流体分律:146:

                                                                            滚来滚去……~(~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

                                                                            1 条回复 最后回复 回复 引用
                                                                            • C
                                                                              coolhhh 最后由 李东岳 编辑

                                                                              @李东岳

                                                                              1、李老师,我用OpenFOAM-8编译了这个程序,编译过程提示有一些未使用变量,但能正常编译。

                                                                              Making dependency list for source file Rotex.C
                                                                              g++ -std=c++11 -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -Wno-attributes -O3  -DNoRepository -ftemplate-depth-100 -I/home/install/OpenFOAM/OpenFOAM-8/src/finiteVolume/lnInclude -I/home/install/OpenFOAM/OpenFOAM-8/src/meshTools/lnInclude -IlnInclude -I. -I/home/install/OpenFOAM/OpenFOAM-8/src/OpenFOAM/lnInclude -I/home/install/OpenFOAM/OpenFOAM-8/src/OSspecific/POSIX/lnInclude   -fPIC -c Rotex.C -o Make/linux64GccDPInt32Opt/Rotex.o
                                                                              Rotex.C: In function \u2018int main(int, char**)\u2019:
                                                                              Rotex.C:153:20: warning: unused variable \u2018eig1c_r\u2019 [-Wunused-variable]
                                                                                153 |             scalar eig1c_r=-0.5*(aaaa+bbbb)-aa/3.0;
                                                                                    |                    ^~~~~~~
                                                                              Rotex.C:154:20: warning: unused variable \u2018eig1c_i\u2019 [-Wunused-variable]
                                                                                154 |             scalar eig1c_i=0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb);
                                                                                    |                    ^~~~~~~
                                                                              Rotex.C:155:20: warning: unused variable \u2018eig2c_r\u2019 [-Wunused-variable]
                                                                                155 |             scalar eig2c_r=-0.5*(aaaa+bbbb)-aa/3.0;
                                                                                    |                    ^~~~~~~
                                                                              Rotex.C:156:20: warning: unused variable \u2018eig2c_i\u2019 [-Wunused-variable]
                                                                                156 |             scalar eig2c_i=-0.5*Foam::sqrt(scalar(3.0))*(aaaa-bbbb);
                                                                                    |                    ^~~~~~~
                                                                              g++ -std=c++11 -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -Wno-attributes -O3  -DNoRepository -ftemplate-depth-100 -I/home/install/OpenFOAM/OpenFOAM-8/src/finiteVolume/lnInclude -I/home/install/OpenFOAM/OpenFOAM-8/src/meshTools/lnInclude -IlnInclude -I. -I/home/install/OpenFOAM/OpenFOAM-8/src/OpenFOAM/lnInclude -I/home/install/OpenFOAM/OpenFOAM-8/src/OSspecific/POSIX/lnInclude   -fPIC -fuse-ld=bfd -Xlinker --add-needed -Xlinker --no-as-needed Make/linux64GccDPInt32Opt/Rotex.o -L/home/install/OpenFOAM/OpenFOAM-8/platforms/linux64GccDPInt32Opt/lib \
                                                                                  -lfiniteVolume -lfvOptions -lmeshTools -lOpenFOAM -ldl  \
                                                                                   -lm -o /home/user1/OpenFOAM/user1-8/platforms/linux64GccDPInt32Opt/bin/Rotex
                                                                              

                                                                              2、提供4个加载CDRFG脉动风的空风洞算例结果下载链接:
                                                                              (1)3个算例用snappyHexMesh画的六面体网格,数量分别为9.6w,150w,364w。
                                                                              (2)1个算例用fluentmeshing画的poly网格,网格数量为141w
                                                                              (3)RotexCase下载链接:
                                                                              链接:https://pan.baidu.com/s/1HQZkWVg2-ZKUF8SmqwkwOg
                                                                              提取码:fgzl

                                                                              3、测试结果
                                                                              (1)9.6w SHM网格算例,Rotex用单核、并行都能正常计算,单核40 s,并行20核计算用0.36 s。但用paraview看后处理结果,虽然可以看到Rotex数据,但由于Rotex输出的结果为矢量,画contour图的时候,选项找不到Rotex,但能选择Lambda2和Q画等值面图。
                                                                              问题是采用Liutex如何画出三维形状的涡?

                                                                              956d8b1e-ae35-46d1-b579-6836a64e5282-image.png
                                                                              e1b91d2b-90ec-4750-a131-52223779cb10-image.png

                                                                              这是选择Rotex画出来的纵向截面图:
                                                                              dc4b6bc1-98d0-4a1f-9ff6-3dc808289546-image.png

                                                                              这是选择Q准则画出的涡形状:
                                                                              52b8276c-7de4-4959-ad30-950fc71792c5-image.png

                                                                              (2)150w SHM网格算例。Rotex并行20核计算用时127 s。

                                                                              (3)364w SHM网格算例。Rotex并行20核计算用时1855 s。可以看出运行Rotex随着网格增加,运行时间是非线性增加的。

                                                                              (4)141w poly网格算例。Rotex并行20核计算,报错Floating point exception,但运行Lambda2和Q画等值面图,能正常运行。

                                                                              Time = 9
                                                                                  Reading U
                                                                              [4] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
                                                                              [4] #1  Foam::sigFpe::sigHandler(int) at ??:?
                                                                              [4] #2  ? in "/lib64/libc.so.6"
                                                                              [4] #3  ? at ??:?
                                                                              [4] #4  __libc_start_main in "/lib64/libc.so.6"
                                                                              [4] #5  ? at ??:?
                                                                              [hpws14:21072] *** Process received signal ***
                                                                              [hpws14:21072] Signal: Floating point exception (8)
                                                                              [hpws14:21072] Signal code:  (-6)
                                                                              [hpws14:21072] Failing at address: 0x3e800005250
                                                                              [hpws14:21072] [ 0] /lib64/libc.so.6(+0x36400)[0x7fab592fb400]
                                                                              [hpws14:21072] [ 1] /lib64/libc.so.6(gsignal+0x37)[0x7fab592fb387]
                                                                              [hpws14:21072] [ 2] /lib64/libc.so.6(+0x36400)[0x7fab592fb400]
                                                                              [hpws14:21072] [ 3] Rotex[0x4136e0]
                                                                              [hpws14:21072] [ 4] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7fab592e7555]
                                                                              [hpws14:21072] [ 5] Rotex[0x4146f0]
                                                                              [hpws14:21072] *** End of error message ***
                                                                              [9] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
                                                                              [9] #1  Foam::sigFpe::sigHandler(int) at ??:?
                                                                              [9] #2  ? in "/lib64/libc.so.6"
                                                                              [9] #3  ? at ??:?
                                                                              [9] #4  __libc_start_main in "/lib64/libc.so.6"
                                                                              [9] #5  ? at ??:?
                                                                              [hpws14:21077] *** Process received signal ***
                                                                              [hpws14:21077] Signal: Floating point exception (8)
                                                                              [hpws14:21077] Signal code:  (-6)
                                                                              [hpws14:21077] Failing at address: 0x3e800005255
                                                                              [hpws14:21077] [ 0] /lib64/libc.so.6(+0x36400)[0x7f02ac8ea400]
                                                                              [hpws14:21077] [ 1] /lib64/libc.so.6(gsignal+0x37)[0x7f02ac8ea387]
                                                                              [hpws14:21077] [ 2] /lib64/libc.so.6(+0x36400)[0x7f02ac8ea400]
                                                                              [hpws14:21077] [ 3] Rotex[0x4136e0]
                                                                              [hpws14:21077] [ 4] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f02ac8d6555]
                                                                              [hpws14:21077] [ 5] Rotex[0x4146f0]
                                                                              [hpws14:21077] *** End of error message ***
                                                                              --------------------------------------------------------------------------
                                                                              Primary job  terminated normally, but 1 process returned
                                                                              a non-zero exit code. Per user-direction, the job has been aborted.
                                                                              --------------------------------------------------------------------------
                                                                              [6] #0  Foam::error::printStack(Foam::Ostream&) at ??:?
                                                                              [6] #1  Foam::sigFpe::sigHandler(int) at ??:?
                                                                              [6] #2  ? in "/lib64/libc.so.6"
                                                                              [6] #3  ? at ??:?
                                                                              [6] #4  __libc_start_main--------------------------------------------------------------------------
                                                                              mpirun noticed that process rank 9 with PID 0 on node hpws14 exited on signal 8 (Floating point exception).
                                                                              --------------------------------------------------------------------------
                                                                              

                                                                              这是poly网格选择Q准则画出的涡形状:
                                                                              a0085592-6bfa-475a-b461-d013ad5776af-image.png

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

                                                                                @coolhhh 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:

                                                                                由于Rotex输出的结果为矢量,画contour图的时候,选项找不到Rotex,但能选择Lambda2和Q画等值面图

                                                                                你用calculator做一个计算器,计算Liutex的mag,然后做等值面图可以么。

                                                                                这个可能要看一下liutex的sci的定义,看是不是通过这个方法来进行的。

                                                                                我下载你150万网格的看下Liutex哪一块最耗费时间。

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

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

                                                                                C 1 条回复 最后回复 回复 引用
                                                                                • C
                                                                                  coolhhh @李东岳 最后由 编辑

                                                                                  @李东岳 在 请教:第三代涡识别方法Liutex的代码在linux中运行的问题 中说:

                                                                                  你用calculator做一个计算器,计算Liutex的mag,然后做等值面图可以么。

                                                                                  这个可能要看一下liutex的sci的定义,看是不是通过这个方法来进行的。

                                                                                  李老师,我看了刘老师的论文(刘超群, Liutex-涡定义和第三代涡识别方法. 空气动力学学报, 2020. 038(003): 第413-431,478页.),里边提到以下几点:

                                                                                  1. Liutex算出的是一个矢量,而Q是标量。

                                                                                  5d860b66-14bf-49ab-8c73-2547e1a70651-image.png
                                                                                  1ad193a9-7207-46ea-bdd9-31acee6a5d8c-image.png

                                                                                  2.文章中提到Liutex为基础的几个涡识别方法,其中之一就是可以用计算mag来画等值面,但这个时候又需要指定阈值:
                                                                                  efc70026-3e7d-4d28-9804-296a780a2ad1-image.png
                                                                                  4faaa900-519b-44d3-aaf4-6fb5f7f136c1-image.png

                                                                                  3.用paraview计算9.6w 网格的算例的mag(Rotex),阈值分别取不同结果如下。Liutex采用幅值等值面因此会存在跟用Q准则一样指定阈值的问题,但根据论文意思是此时画出的等值面和Liutex向量线是大致平行的。
                                                                                  (1)mag(Rotex)=0.1结果
                                                                                  a3ac9556-a336-42fb-b483-7a11589236d9-image.png
                                                                                  (2)mag(Rotex)=0.5结果
                                                                                  db84c537-c5c0-4275-a29d-875f1b454702-image.png
                                                                                  (3)mag(Rotex)=2结果
                                                                                  9e3f4558-62ce-42cf-b822-bf1fddf599e4-image.png

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

                                                                                    我测试了一下,单核计算,对于这个150万网格的算例,每个网格的操作要占用30ms来计算,150万网格就是45000秒。

                                                                                    因为我对Liutex这个计算过程不熟悉,不清楚这个是否能做简化。

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

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

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