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. OF并行计算这个语句,与单核运行时有什么不同?

OF并行计算这个语句,与单核运行时有什么不同?

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

    同意楼上,a minimal working example would be helpful :tongue_out:

    1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    写于 最后由 Aeronastro 编辑
    #5

    首先感谢@cfd-china 和@wwzhao 的回复,我把我的问题描述重新说一下

    int main(int argc, char *argv[])
    {
         // 一些必要的#include "... .H"
          ..........
          .........
    
    
          while(runTime.run())
          {
               ......
               ......
    
    
               U.correctBoundaryConditions();
               Info << "breakPoint" << endl;
               getchar();     // 不会出现内存错误
               T.correctBoundaryConditions();
              // Info << "breakPoint" << endl;
              // getchar();      出现内存错误
               p.correctBoundaryConditions();
    
    
    
             ......
             ......
            .......
          }
    }
    

    用这个格式会直观一些,我的入口边界条件是自定义的,是通过计算得到的速度场,温度场等,将他们的value逐个赋给入口的faces,在每次循环求解之前,我要手动更新边界,让新算出来的速度场、温度场等赋值到新的时间步的边界上,上面的代码我执行U.correctBoundaryConditions(),没有问题,可以在屏幕上出现“breakPoint”的信息,如果写成

              U.correctBoundaryConditions();
              // Info << "breakPoint" << endl;
               //getchar();     // 不会出现内存错误
              T.correctBoundaryConditions();
              Info << "breakPoint" << endl;
              getchar();     // 出现内存错误
              p.correctBoundaryConditions();
    

    就会出现我之前遇到的问题,不知道这个在并行的时候为什么会这样。
    PS:关于并行,之前@wwzhao 说过关于分布式内存,我想是不是问题出现在这儿。
    我的入口边界条件中经过计算得到的速度场,温度场没有使用new,而是直接用的全局变量(就是写在了主函数体外),即:在求解器的C文件中:

    #include "fvCFD.H"
    #include "....H"    // 一些必要的头文件
    .....
    
    #include "incl3d.H"    //一些定义的量,包括那个要计算的速度场,温度场等,我为了方便写成了.H文件
    
    int main()
    {
         ......
    }
    

    不知道这样有什么问题?看之前的错误信息的附图(可能不是很清晰),里面有new, delete, delete[]的错误。

    C W 2 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    在 中回复了 Aeronastro 最后由 编辑
    #6

    在每次循环求解之前,我要手动更新边界,让新算出来的速度场、温度场等赋值到新的时间步的边界上,

    每个时间步都需要这么做?:big_mouth: :big_mouth: :big_mouth:

    在程序里面添加getchat()是为什么?

    也就是说你的程序是这样的:?

               U.correctBoundaryConditions();
               getchar();     
               T.correctBoundaryConditions();
               getchar();      //出错?
               p.correctBoundaryConditions();
    

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    A 1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 CFD中文网 最后由 Aeronastro 编辑
    #7

    @cfd-china 我今天发现,在执行完U.correctBoundaryConditions()之后,执行T.correctBoundaryConditions()里面的boundaryField_.evaluate()就会出错,而且我定位到evaluate函数源码,好像都没有执行这个函数就报错了,也就是说evaluate函数一句都没执行过

    但是单核运行,都没问题

    1 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    写于 最后由 编辑
    #8

    刚才误删了原贴。

    你试过执行U.correct()两遍么?而不是第一遍U第二遍T

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    A 3 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 Aeronastro 最后由 编辑
    #9

    @Aeronastro 场量的声明一般放在 createFields.H 文件当中,而这个文件会在main函数中用 #include 语句包含进来。

    A 1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 CFD中文网 最后由 Aeronastro 编辑
    #10

    @cfd-china 这个没有试过。可以具体一些么?我还不太清楚你的意思:confused:

    1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 CFD中文网 最后由 Aeronastro 编辑
    #11

    @cfd-china

    我在并行的时候,出现这样的信息,一直没管:

    warning: the debug information found in "/usr/lib/debug//lib/x86_64-linux-gnu/libm-2.19.so" does not match "/lib/x86_64-linux-gnu/libm.so.6" (CRC mismatch).
    
    warning: the debug information found in "/usr/lib/debug/lib/x86_64-linux-gnu/libm-2.19.so" does not match "/lib/x86_64-linux-gnu/libm.so.6" (CRC mismatch).
    
    warning: the debug information found in "/usr/lib/debug//lib/x86_64-linux-gnu/libc-2.19.so" does not match "/lib/x86_64-linux-gnu/libc.so.6" (CRC mismatch).
    
    warning: the debug information found in "/usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so" does not match "/lib/x86_64-linux-gnu/libc.so.6" (CRC mismatch).
    
    warning: the debug information found in "/usr/lib/debug//lib/x86_64-linux-gnu/libpthread-2.19.so" does not match "/lib/x86_64-linux-gnu/libpthread.so.0" (CRC mismatch).
    
    warning: the debug information found in "/usr/lib/debug/lib/x86_64-linux-gnu/libpthread-2.19.so" does not match "/lib/x86_64-linux-gnu/libpthread.so.0" (CRC mismatch).
    

    不知道这个是什么

    1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 wwzhao 最后由 编辑
    #12

    @wwzhao 嗯嗯是的,我因为要在主函数中调用一个函数,而这个函数里要用到一些量,所以我把这些要用到的量定义成了全局变量,这样的话在执行完这个函数的时候,那些变量还在,供主函数继续操作。而别的量我已经在createField.H中定义了。

    1 条回复 最后回复
  • A 离线
    A 离线
    Aeronastro
    在 中回复了 CFD中文网 最后由 编辑
    #13
    此回复已被删除!
    1 条回复 最后回复

  • 登录

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