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 并行计算renumberMesh 报错

OpenFOAM 并行计算renumberMesh 报错

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

    最近写了一个inlet boundary condition的code, 并行计算的时候一直报错。具体问题是:
    我在0文件下定义了:
    inlet
    {
    type DSRFGVelocity;
    M 600;
    N 100;
    uref 22.5091;
    alpha 0.1538;
    zref 1.3860;
    inflowPar pkqomega;
    value uniform (0 0 0);
    }
    如果单核计算没有问题,但是等到并行计算renumberMesh的时候 会报错。我是这么做的,当mesh都处理好以后:
    decomposepar
    mpirun -np xx renumberMesh -overwrite -parallel
    mpirun -np xx pisoFoam -parallel.
    报错信息是:
    --> FOAM FATAL IO ERROR:

    [0] compound has already been transferred from token

    on line 33 the empty compound of type List<vector>
    

    [0]

    [0] file: /ddnA/work/xuwang/DSRFGinflow/processor0/0/U.boundaryField.inlet.value at line 33.

    [0]

    [0] From function Foam::token::compound& Foam::token::transferCompoundToken(const Foam::Istream&)

    [0] in file lnInclude/token.C at line 99.

    [0]

    FOAM parallel run aborting

    然后打开processor0/0/U 文件后,那个inlet是这样的:

    inlet

    {
    
        type            DSRFGVelocity;
    
        M               600;
    
        N               100;
    
        zref            1.386;
    
        alpha           0.1538;
    
        uref            22.5091;
    
        inflowPar       pkqomega;
    
        value           nonuniform List<vector>
    

    1372

    (

    (27.414161 3.7652743 -1.313935)

    我能感觉到的就是,在0文件下U的value被定义成了uniform (0 0 0),但是程序一旦运算,就把inlet 上的速度值给重新计算了一次,导致变成了nonuniform。但是of6中自带的turbulentInlet算例,也是这样做的,不知道为什么我这里出了问题。我自己写的inflow的updateCoeffs()函数如下:
    void Foam::DSRFGVelocityFvPatchVectorField::updateCoeffs()

    {

    if (this->updated())
    
    {
    
        return;
    
    }
    
    if (curTimeIndex_ != this->db().time().timeIndex())
    

    {

    scalar time = this->db().time().value();
    
    
    
    vectorField Uavg(patch().size(),vector::zero);
    
    vectorField Uprim(patch().size(),vector::zero);
    
    vectorField Utotal(patch().size(),vector::zero);
    

    xxxxxxx 省略中间一些繁琐的步骤
    this->operator==(Utotal);

    curTimeIndex_ = this->db().time().timeIndex();

    }

    fixedValueFvPatchVectorField::updateCoeffs();
    

    }

    请各位高人指点!

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

    问题解决了,原来是有个constructor写错了,本来这个错误可以避免的,用foamNewBC生成的模版就可以了,但是我的code是根据一个of v2112版本的code改的,我用的是openfoam v6,所以没注意,把一个constructor改了一下,导致出现了这个错误。

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

    个人感觉,如果犯了一个不太常见的错误,在cfdonlie这种论坛也搜不到太多类似的帖子,很可能是犯了一些很基本的错误。就好像我一直去搜autoMap 和rmap这两个member function怎么用一样,发现讨论的人特别少,那很可能别人在这两个function都没犯过错误,也意味着,这两个function可能不会出错,虽然最终搞明白了这两个function的用法,但对解决问题完全没有任何帮助。

    1 条回复 最后回复

  • 登录

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