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周期边界生成不成功,cyclic的问题

OpenFOAM周期边界生成不成功,cyclic的问题

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

    另,建议改小matchToTolerance。相对于你的网格尺寸,这个值明显偏大。

    天命之谓性;率性之谓道;修道之谓教。
    道也者,不可须臾离也;可离,非道也。是故君子戒慎乎其所不睹,恐惧乎其所不闻。
    莫见乎隐,莫显乎微。故君子慎其独也

    1 条回复 最后回复
  • R 离线
    R 离线
    random_ran 大神
    写于 最后由 编辑
    #8

    嗨 youmengtian:

    非常感谢阅读我的这个瞎折腾! 当时是想看看 OF 到底能跑多大的网格,所以才有了这些。

    由于这是 cfd-china , 默认大家都用中文,所以我有点担心会不会影响到别人。但是,这种边看代码,边写文档的东西,我目前只能在在 emacs 中高效地完成,所以就只能用英文来交流。 如果冒犯到你,请不要继续往下读。

    I am using OF-dev version (don't know exactly the date I downloaded
    it).

    The main classes are found in the flowing path:

    ~/OpenFOAM-dev/src/dynamicMesh/polyTopoChange/polyTopoChange/modifyObject/
    

    This for loop:

    //Line 707
    //~/OpenFOAM-dev/applications/utilities/mesh/manipulation/createPatch/createPatch.C
    
    void changePatchID
    (
      const polyMesh& mesh,
      const label faceID,
      const label patchID,
      polyTopoChange& meshMod
    )
    

    is the point that I feel something might wrong.

    I don't know exactly what polyModifyFace is a function or a
    class. I double checked the defination of polyModifyFace:

    //Line 82
    //~OpenFOAM-dev/src/dynamicMesh/polyTopoChange/polyTopoChange/modifyObject/polyModifyPoint.H
    meshMod.setAction
      (
          polyModifyFace
          (
    	  mesh.faces()[faceID],               // face
    	  faceID,                             // face ID
    	  mesh.faceOwner()[faceID],           // owner
    	  -1,                                 // neighbour
    	  false,                              // flip flux
    	  patchID,                            // patch ID
    	  false,                              // remove from zone
    	  zoneID,                             // zone ID
    	  zoneFlip                            // zone flip
          )
      );
    

    I think polyModifyFace really looks like a function definition in
    c++, but I might wrong.

    Another thing that I feel strange is that the implementation of the
    following classes are missing.

    3.5k 12-14 23:52 polyModifyCell.H
    7.5k 12-14 23:52 polyModifyFace.H
    4.2k 12-14 23:52 polyModifyPoint.H
    

    Is that becasue those classes are too easy?

    I furthe study the class (~/OpenFOAM-dev/src/dynamicMesh/polyTopoChange/polyTopoChange/modifyObject/polyModifyFace.H):

    //- Construct and return a clone
    virtual autoPtr<topoAction> clone() const
    {
        return autoPtr<topoAction>(new polyModifyFace(*this));
    }
    

    Is this clone() function mess up all the things? If so, what's the
    limited of it? How big (size of the mesh) the OF can handle?

    I agree with you. This mesh is converted from \*.msh file without any
    issue. convertMesh seems have a much large memory requirement. I am
    not sure exactly the order of it.

    What I want to do, is to run some small test to investigate the
    memory usage of convertMesh and creatPatch.

    Finally, why make it (matchToTolerance) smaller? Do you have any
    reference to this point? I might (can remember exactly) just use
    some default number here.

    Yours in CFD,

    Ran

    W Y 2 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 random_ran 最后由 编辑
    #9

    @random_ran 我猜可能是 int 类型长度限制的原因。你看一下 echo $WM_LABEL_SIZE ,默认是 32,如果要用超大网格,需要在编译前将 WM_LABEL_SIZE 设为 64。

    1 条回复 最后回复
  • Y 离线
    Y 离线
    youmengtian
    在 中回复了 random_ran 最后由 编辑
    #10

    @random_ran 您说的太客气了,虽然咱们这儿叫CFD中文网但是也没说不让使用英文。你之前的阅读逻辑是没有什么错误的,但是我不知道你怎么读到polyModifyPoint.H这个头文件去,因为我觉得貌似跟这个头文件没有关系。但是我感觉你对错误的基本定位应该是准确的,应该就出现在polyModifyFace.H第190行开辟新的智能指针出错了

    polyModifyFace.H      188
    virtual autoPtr<topoAction> clone() const
    {
        return autoPtr<topoAction>(new polyModifyFace(*this));
    }
    

    天命之谓性;率性之谓道;修道之谓教。
    道也者,不可须臾离也;可离,非道也。是故君子戒慎乎其所不睹,恐惧乎其所不闻。
    莫见乎隐,莫显乎微。故君子慎其独也

    1 条回复 最后回复
  • R 离线
    R 离线
    random_ran 大神
    写于 最后由 编辑
    #11

    因为我几次遇到过在网络上由于这种潜在规则的问题的不明了导致的一些不必要的麻烦,所以谨慎点应该的。看来之后的交流会更加便捷 :)

    @youmengtian

    The reason why I checked polyModifyFace was that I wanted to study
    the piece of code in:

    //Line 82
    //~OpenFOAM-dev/src/dynamicMesh/polyTopoChange/polyTopoChange/modifyObject/polyModifyPoint.H [wrong!]
    ///OpenFOAM-dev/applications/utilities/mesh/manipulation/createPatch/createPatch.C [correct]
    meshMod.setAction
      (
          polyModifyFace
          (
    	  mesh.faces()[faceID],               // face
    	  faceID,                             // face ID
    	  mesh.faceOwner()[faceID],           // owner
    	  -1,                                 // neighbour
    	  false,                              // flip flux
    	  patchID,                            // patch ID
    	  false,                              // remove from zone
    	  zoneID,                             // zone ID
    	  zoneFlip                            // zone flip
          )
      );
    

    I don't know the reason why it crash, that's why I am asking.

    return autoPtr<topoAction>(new polyModifyFace(*this));
    

    Do you know how this function could trigger the following exception:

    terminate called after throwing an instance of 'std::bad_array_new_length'
    what():  std::bad_array_new_length
    

    I don't know.

    @wwzhao

    thanks for helping. This test case was built Jul 06 2018,
    so I am not sure the exactly envirmental varibles that I was playing with.

    I've double checked the:

    echo $WM_LABEL_SIZE
    32
    

    It looks like a right direction to further study this stuff. But, it
    needs more time, since I need to rebuid OF. Which Version would you
    like to suggest me to run? dev or v4.1?

    Also, if the default

    $WM_LABEL_SIZE</sub> is indeed 32
    

    what is its theoretical upper bond, i.e. running pisoFoam (motobike tutorial?).

    Can I change to any number (2^{5,6,7,8})?

    Yours in CFD,

    Ran

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 random_ran 最后由 编辑
    #12

    @random_ran OpenFOAM中用label表示point、face和cell的size,默认情况下label为int32类型(WM_LABEL_SIZE=32)。抛出异常的原因很可能是由于对face size的计算超过了int32类型的最大限制,导致变为负数。若将label用int64类型表示(WM_LABEL_SIZE=64)则应该可以避免这个问题。不过所有label类型的变量占用内存是原来的两倍。

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #13

    关于OpenFOAM版本,没必要追求最新,够自己用就行。

    1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    写于 最后由 编辑
    #14

    理论上限跟WM_LABEL_SIZE有关,若任何一个label数组长度超过2^(N-1)-1(对int32是2^31-1,对int64是2^63-1),则会抛出异常。

    1 条回复 最后回复
  • R 离线
    R 离线
    random_ran 大神
    写于 最后由 编辑
    #15

    好的,我再仔细研究研究 这个 LABEL_SIZE 的东西。有新的进展我再贴在这里。

    (话说你的博客好赞啊!超喜欢这种风格。不知道是否接受 OF 热心读者的问题呢?直接留言在 Disqus 好还是在这里发帖,博主会看见呢?)

    Yours in CFD,

    Ran

    W 1 条回复 最后回复
  • W 离线
    W 离线
    wwzhao 超神
    在 中回复了 random_ran 最后由 编辑
    #16

    @random_ran

    哈哈,多谢捧场。博客是用markdown写的,记录了一些自己对OpenFOAM的理解,初学者阅读可能比较吃力 :zoule:

    有问题欢迎交流,Disqus跟论坛均可,我都能看到 :w:

    1 条回复 最后回复

  • 登录

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