Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. mapFields 太慢,想在里面加入cputime这样的输出

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

已定时 已固定 已锁定 已移动 OpenFOAM
4 帖子 2 发布者 5.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    Haining LUO
    写于 最后由 编辑
    #1

    我做一个转子在流体里搅动的算例,有两套网格:源网格是动网格(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 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #2

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    H 2 条回复 最后回复
  • H 离线
    H 离线
    Haining LUO
    在 中回复了 李东岳 最后由 Haining LUO 编辑
    #3

    @李东岳
    我的版本是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 条回复 最后回复
  • H 离线
    H 离线
    Haining LUO
    在 中回复了 李东岳 最后由 Haining LUO 编辑
    #4

    @李东岳
    所以每一个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 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]