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. 新写的程序单核计算无问题,但无法并行计算?

新写的程序单核计算无问题,但无法并行计算?

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

    CFD的大佬们:

    最近我基于interFOAM和sixDof模块写了一个关于动网格的程序,并将动网格计算的结果作为pimple外循环的判据,这个程序在单核的情况下运行没问题,结果也正确,但是无法并行,只要一并行就会出现类似这样的错误:

    [1] --> FOAM FATAL IO ERROR: 
    [1] incorrect first token, expected '(', found on line 0 the punctuation token ':'
    [1] 
    [1] file: IOstream at line 0.
    [1] 
    [1]     From function Foam::Istream& Foam::operator>>(Foam::Istream&, Foam::List<T>&) [with T = Foam::Field<Foam::Vector<double> >]
    [1]     in file /home/wdx/OpenFOAM-6/src/OpenFOAM/lnInclude/ListIO.C at line 131.
    [1] 
    FOAM parallel run exiting
    

    或者这样类似的:

    [1] --> FOAM FATAL IO ERROR: 
    [1] incorrect first token, expected <int> or '(', found on line 0 the word 'g'
    [1] 
    [1] file: IOstream at line 0.
    [1] 
    [1]     From function Foam::Istream& Foam::operator>>(Foam::Istream&, Foam::List<T>&) [with T = Foam::Field<Foam::Vector<double> >]
    [1]     in file /home/wdx/OpenFOAM-6/src/OpenFOAM/lnInclude/ListIO.C at line 148.
    [1] 
    FOAM parallel run exiting
    [1] 
    [32] 
    [32] 
    [32] --> FOAM FATAL IO ERROR: 
    [32] error in IOstream "IOstream" for operation operator>>(Istream&, List<T>&) : reading first token
    [32] 
    [32] file: IOstream at line 0.
    [32] 
    [32]     From function void Foam::IOstream::fatalCheck(const char*) const
    [32]     in file db/IOstreams/IOstreams/IOstream.C at line 109.
    [32] 
    FOAM parallel run exiting
    [32] 
    [8] 
    [8] 
    [8] --> FOAM FATAL IO ERROR: 
    [8] error in IOstream "IOstream" for operation operator>>(Istream&, List<T>&) : reading first token
    [8] 
    [8] file: IOstream at line 0.
    [8] 
    [8]     From function void Foam::IOstream::fatalCheck(const char*) const
    [8]     in file db/IOstreams/IOstreams/IOstream.C at line 109.
    [8] 
    FOAM parallel run exiting
    

    我看了一下提示,发现是输入流的问题,具体错误我也定位出来了,是在计算库朗数时(CourantNo.H):

    scalarField sumPhi
        (
            fvc::surfaceSum(mag(phi))().primitiveField()
        );
    

    我觉得这个错误的原因就是我将pimple.loop()改为了其他的判据,但是我看了pimple.loop()执行的内容,也尝试自己在程序中添加类似的内容,没有效果。

    总的来说,目前的程序是单核运行没问题,但是并行会出错,并且一旦外循环的次数超过字典文件中指定的次数,错误就发生了(由于算法的前两个时间步要用到pimple 外循环所以pimpleOuterLoop这个数字还是要给定的,我给的是5)。

    我最疑惑的地方就是为什么我单核的时候计算完全没问题,一并行就出现问题?对并行的机制不是很懂,求大神帮帮忙,不胜感激!

    1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    写于 最后由 编辑
    #2

    经过研究我发现不是当外循环数超过指定值时就会出错,而是当pimple外循环根据我设置的判据停止时就会出错。似乎应该是在pimple.loop()这个函数中有某些操作没有被我发现,这个对于并行很重要对于单核运行却无关紧要。

    1 条回复 最后回复
  • O 离线
    O 离线
    OItoCFD
    写于 最后由 编辑
    #3

    您好,想问下基于OpenFOAM写新模块 mpi并行那些需要考虑吗?因为课题组的代码面向过程的,写每个部分时候都要考虑mpi的消息传递。OpenFOAM这么高度面向对象,是不是按照串行写就行?

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #4

    @OItoCFD 在 新写的程序单核计算无问题,但无法并行计算? 中说:

    mpi并行那些需要考虑吗?

    一般不需要考虑

    除非你的surface场进行一些特殊的插值

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

    1 条回复 最后回复

  • 登录

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