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
27 帖子 12 发布者 18.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #21

    感谢各位大佬,太神奇了。目前我在想或许DynamicList或者hash table是个好出发点

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

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

    我现在用的最笨的方法弄得:

    1. 网格遍历
    2. 粒子遍历
    3. 如果粒子恰好在网格内,就把label存储在当前网格的DynamicList
            forAll(U_, cell)                                         
            {
                DynamicList<label> pL(0);
                                                                     
                scalar pN = 0;
                forAllConstIter(typename MomentumCloud<CloudType>, *this, iter)
                {                                                    
                    const parcelType& p = iter();                    
                    if (p.cell() == cell)                            
                    {                                                
                        pN += 1;                                     
                        pL.append(p.origId());
                    }                                                
                }
                
                if (pN != 0)                                         
                {
                    Info<< "Cell[" << cell << "] has " << pN << " particles, "
                        << "particle label is " << pL << nl;         
                }
            }   
    

    输出结果还可以:

    Cell[2295] has 2 particles, particle label is 2(20 21)
    Cell[2297] has 2 particles, particle label is 2(4 7)
    Cell[2298] has 1 particles, particle label is 1(3)
    Cell[2340] has 3 particles, particle label is 3(17 18 19)
    Cell[2341] has 5 particles, particle label is 5(11 13 14 15 16)
    Cell[2342] has 4 particles, particle label is 4(5 6 8 9)
    Cell[2343] has 1 particles, particle label is 1(1)
    Cell[2386] has 1 particles, particle label is 1(12)
    Cell[2387] has 1 particles, particle label is 1(10)
    Cell[2388] has 2 particles, particle label is 2(0 2)
    
    

    但是这里面遍历网格+遍历粒子。肯定是要慢。

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

    马乔马 1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    在 中回复了 李东岳 最后由 编辑
    #23

    @李东岳 这么写呢?

                List<DynamicList<label>> pL(U_.size());
                forAllConstIter(typename MomentumCloud<CloudType>, *this, iter)
                {                                                    
                         const parcelType& p = iter();                                              
                        pL[p.cell()].append(p.origId());                                           
                }            
    

    或者

    std::Multimap<label,label> Lp;
    forAllConstIter(typename MomentumCloud<CloudType>, *this, iter)
    {
         const parcelType& p = iter();  
         Lp.insert(std::pair<label,label>(p.cell(), p.origId()));
    }
    

    都是我云的:haqi:

    装逼没输过,吵架没赢过!

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 马乔 最后由 编辑
    #24

    @马乔

                List<DynamicList<label>> pL(U_.size());
                forAllConstIter(typename MomentumCloud<CloudType>, *this, iter)
                {                                                    
                         const parcelType& p = iter();                                              
                        pL[p.cell()].append(p.origId());                                           
                }   
    

    这种方法不需要遍历两次。类似一种DynamicListField。不过有很多元素是空的。不过比我的方法要快。挺好。多谢大佬

    :xiezuoye:

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

    1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    在 中回复了 同学博 最后由 编辑
    #25

    @同学博 你这么操作map是对的,我开想的是查找key

    装逼没输过,吵架没赢过!

    同学博同 1 条回复 最后回复
  • 同学博同 离线
    同学博同 离线
    同学博
    在 中回复了 马乔 最后由 编辑
    #26

    @马乔 :chouchou:

    1 条回复 最后回复
  • T 离线
    T 离线
    TM
    写于 最后由 编辑
    #27

    这段用来统计网格单元内粒子个数的代码,编译的路径是什么,求东岳老师指导

    1 条回复 最后回复

  • 登录

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