Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    mapFields 太慢,想在里面加入cputime这样的输出

    OpenFOAM
    2
    4
    2728
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Haining LUO last edited by

      我做一个转子在流体里搅动的算例,有两套网格:源网格是动网格(AMI),目标网格不是动网格没有叶片,所以在映射的时候没有用-consistent。问题是时间很长,12个cpu要三个小时,源网格大小是610万左右,目标网格接近600万,所以想要在代码里面加入一些输出来看每段调用花的时间。于是就从icoFoam里面的例子出发:

      int main(int argc, char *argv[])
      {
      #include "setRootCase"
      #include "createTime"
      // ...
              Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
                  << "  ClockTime = " << runTime.elapsedClockTime() << " s"
                  << nl << endl;
      

      刚好在mapFields.C里面找到有Time类的runTimeSource和runTimeTarget:

      #include "createTimes.H"
      

      所以在main函数里面按照icoFoam那样输出cpu time没有问题。再深入一点,进入到其它的函数里面会怎么样呢?在我的例子里consistent为假:

          else
          {
              mapSubMesh
              (
                  meshSource,
                  meshTarget,
                  patchMap,
                  addProcessorPatches(meshTarget, cuttingPatches),
                  mapMethod,
                  patchMapMethod,
                  subtract,
                  selectedFields,
                  noLagrangian
              );
          }
      

      去找mapSubMesh,还在mapFields.C里面,里面又有一个meshToMesh类的构造函数,嵌套了constructFromCuttingPatches,最后比如说我来到其中的calculate(methodName);想在这样一个函数体里面用mapFields里面main中初始化的runTimeTarget

      void Foam::meshToMesh::calculate(const word& methodName)
      {
      Info<< runTimeTarget.elapsedCpuTime() << endl;
      // 就加了上面一行
      }
      
      $ wmake
      meshToMeshInterpolation/meshToMesh/meshToMesh.C: In member function 'void Foam::meshToMesh::calculate(const Foam::word&)':
      meshToMeshInterpolation/meshToMesh/meshToMesh.C:161:42: error: 'runTimeTarget' was not declared in this scope
           Info<< "Hi, if runTime available" << runTimeTarget.elaspedCpuTime() << endl;
                                                ^
      make: *** [Make/linux64GccDPDebug/meshToMesh.o] Error 1
      

      我的问题可以总结为在main里面的Time实例,如何在像calculate这样的函数里面使用?

      Time继承自clock(OpenFOAM/global/clock)和cpuTime(OSspecific/POSIX/cpuTime),但我不明白global文件夹的意思?C++的基础薄弱,希望有人能解答~

      1 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by

        mapFields很慢?我在2015年算一个高尔夫球的时候遇到过这个问题。你用的是什么版本OpenFOAM,印象中OpenFOAM-2.3.x以后对mapFields进行了大量改动,你用的是mpirun的方式?

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

        H 2 Replies Last reply Reply Quote
        • H
          Haining LUO @李东岳 last edited by Haining LUO

          @李东岳
          我的版本是OpenFOAM-2.3.x,命令为

          mpirun -np 12 mapFields $sourceCase -noFunctionObjects -fields '(U)' -sourceTime '0.2' -parallel
          

          在3.0.1里面有parallelSource选项什么的:

          $ mapFields -help
            -parallelSource   the source is decomposed
            -parallelTarget   the target is decomposed
          

          但是我用的2.3.x没有,具体做这个map的过程是从souceCase里面拷贝constant(网格)和system(主要是decomposeParDict),然后decomposePar,这时候每一个processor*文件中都会有constant,[0_1492506170401_log.mapFields.txt],这个时候做mapFields,具体-time写的什么我记不清楚了,但是mapFields每次默认的Target time = 00_1492506483653_log.mapFields.txt,这个log里面有我在相应类的地方加的一些输出。

          1 Reply Last reply Reply Quote
          • H
            Haining LUO @李东岳 last edited by Haining LUO

            @李东岳
            所以每一个map时间步后我把所有的0文件重命名成相应的时间步再进行下一步。
            下面是相关的附件:

            我用的脚本:
            0_1492507241431_Allrun1.txt
            mapFieldsDict:
            0_1492507250371_mapFieldsDict.txt

            Source case 转子部分
            0_1492509534847_SourceMesh_with_blades_rotwall_blade.jpg
            还有cyclicAMI类型的rotinterface_rmax _zmax _zmin没有显示出来

            Target case 转子部分,cuttingPatches的两个patch
            0_1492508448117_TargetMesh_no_blades_cuttingPatches.jpg

            1 Reply Last reply Reply Quote
            • First post
              Last post

            CFD中文网 | 东岳流体 | 京ICP备15017992号-2
            论坛登录问题反馈可联系 li.dy@dyfluid.com