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. Fluent
  3. 说说关于dpm系统的半透膜的问题

说说关于dpm系统的半透膜的问题

已定时 已固定 已锁定 已移动 Fluent
3 帖子 2 发布者 3.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • L 离线
    L 离线
    l.j刘侃
    写于 最后由 李东岳 编辑
    #1

    我来说说关于dpm系统半透的事情

    一般dpm的碰撞判断基本是BC宏 这个不多说

    碰撞算法fluent未透露 但是在ANSYS博客中间有一部分提及了 是采用了颗粒轨迹线与面是否相交的办法 这个办法是属于碰撞检测算法 line-surface 这个方法非常的复杂 同时在CFD-ONLINE中间 也有人讨论过这个问题 从我的看法来说 这点Fluent的保密不可能是采用最原始的intersection算法 如果是的话 那么巨量的颗粒沉降计算很明显没有fluent这样的高效

    好了 这是说了题外话 但是也跟接下来的相关

    也就是当你不利用BC宏的时候 你需要写这样一个算法来判断 dpm 的截留 而这显然是在半透上是简单的 因为这样的话 你只要一个在某一个面上 甚至是一个解析几何的决定上 就可以构造你的半透面 只要颗粒符合你的条件 当然这种复杂在于你的颗粒将在第几步碰撞 那么一个更加显示的 他能够在途中的每个网格的步数是多少(假设颗粒在第一次进入一个cell内被捕获,这一般是现实的,因为你基本上只要处理碰撞表面网格的数据) 那么又一个很关键的 你需要重新一个颗粒更新步的计算 假设你是最简单的欧拉蛙跳(那么很显然你需要了解一个parcel的合外力,所以你必须了解整个dpm.h和其他几个.h的头文件,并且你具备常年的猜测调试和积累,显然就手册那点玩意还是太浅薄了)那么 你将可以直接解决这个半透的问题

    而如果你不写trap算法 那么很明显 你需要使用fluent所谓的DPM体系的BC宏。这个宏在颗粒碰撞你挂载的壁面的时候执行,记住这个宏执行将中断颗粒时间步 而他本身是不出网格的 因为出网格需要赋值新的P0值,p0值决定于particle结构体而p属于tracked particle 。也就是说 当颗粒碰到这个面的时候 碰撞数据被计算 碰撞点被获取 颗粒必须更新他的v0值。而这个v0依然是在当前的cell 而颗粒的fate 只有active end abort escape 你的trap会使用abort 但是他决于与p->gvtp 如果要他在head中显示正常 你还得做一番处理

    这些都不是问题 颗粒将在当前cell被分割 但是这个这个新的p0值依然是在当前cell内 那么就是说 这些颗粒继续会被这个BC执行 最终的结果是所有颗粒都被在封闭在这个cell内来回碰壁 截留 最后造成完全的incomplete
    那么如何半透? 你设想的一个简单的问题 现在已经演变成了一个真正可以实现的问题

    设想一个现实的条件 颗粒一部分会被反弹(他的vo重新被设置) 一部分被捕获(path_abort) 一部分透过(记住你的时间步已经被分割, 而透过是不分割时间步的)

    那么请提供我一个办法 如果处理 你所想的半透?欢迎讨论 真理从来都是越辩越明的

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

    @l-j刘侃 刘老师打字没有标点符号啊 :quwan:

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

    1 条回复 最后回复
  • L 离线
    L 离线
    l.j刘侃
    写于 最后由 编辑
    #3

    因为时间比较紧,叙述不是很明了,现在按照李老师的建议,加上标点。

    一般dpm的碰撞判断基本是BC宏,这个不多说。

    碰撞算法fluent未透露,但是在ANSYS博客中间有一部分提及了,是采用了颗粒轨迹线与面相交的办法。这个办法是属于碰撞检测算法 line-surface。 这个方法非常的复杂。同时在CFD-ONLINE中间,也有人讨论过这个问题。 从我观点,这点Fluent的保密算法不可能是采用最原始的intersection算法;如果是的话,那么巨量的颗粒沉降计算很明显没有fluent这样的高效。

    好了,这是说了题外话,但是也跟接下来的相关。

    也就是当你不利用BC宏的时候,你需要写这样一个算法(line-surface)来判断 dpm 的截留。而这显然是在半透处理上是较为简单的。因为这样的话,你只要一个在某一个面上,甚至是一个解析几何的构成虚拟面上,就可以构造你的半透面。只要颗粒符合你的条件。 当然这种复杂在于你的颗粒将在第几步碰撞? 他能够在途中的每个网格的步数是多少?(假设颗粒在第一次进入一个cell内被捕获,这一般是现实的,因为你基本上只要处理碰撞表面网格的数据)。 那么又有一个很关键的问题: 你需要重新编制一个颗粒更新步的计算。 假设你是最简单的欧拉蛙跳,也显然你需要了解一个parcel的合外力,所以你必须了解整个dpm.h和其他几个.h的头文件。 那么,你将可以直接解决这个半透的问题。

    而如果你不写trap算法。那么很明显,你需要使用fluent所谓的DPM体系的BC宏。这个宏在颗粒碰撞你挂载的壁面的时候执行,记住这个宏执行将中断颗粒时间步。 而他本身是不出网格的。 因为出网格需要赋值新的P0值。(P0属于particle结构体而p属于tracked particle )。也就是说,当颗粒碰到这个面的时候,碰撞数据被计算,碰撞点被获取,颗粒必须更新他的P_v0值,而particle依然是在当前cell,且颗粒的fate只有active, end, abort, escape 四种。 你的trap可以使用abort,但是他的显示数值决于于p->gvtp, 如果要他在head中显示正常, 你还得做一番处理。

    最要的问题是,颗粒将在当前cell被分割,但是这个这个新的P0值依然是在当前cell内。 那么就是说,这些颗粒继续会被这个BC执行。 最终的结果是所有颗粒都被在封闭在这个cell内来回碰壁, 截留, 最后造成完全的incomplete。
    那么如何半透? 现在已经说明了在fluent实现这个半透可能的方法。

    设想一个现实的条件。颗粒一部分会被反弹(他的vo重新被设置) 一部分被捕获(path_abort) 一部分透过(记住你的时间步已经被分割, 而透过是不分割时间步的)。但就是这样最简单的日常物理现象,因为时间步被分割,碰撞算法被黑盒子,依然是十分困难的。(并且fluent的更新过程并不是属于经典的更新过程,时间步的更新会被更小的切分,根据你的设定,并且每一个切分步,你的UPDATA_SCALAR宏都会被执行。也就是说一个理论上的碰撞算法,很可能并不具备真正的可实现性。)

    1 条回复 最后回复

  • 登录

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